123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- # A Demo of Pythonwin's Dialog and Property Page support.
-
- ###################
- #
- # First demo - use the built-in to Pythonwin "Tab Stop" dialog, but
- # customise it heavily.
- #
- # ID's for the tabstop dialog - out test.
- #
- import win32con
- import win32ui
- from pywin.mfc import dialog
- from win32con import IDCANCEL
- from win32ui import IDC_EDIT_TABS, IDC_PROMPT_TABS, IDD_SET_TABSTOPS
-
-
- class TestDialog(dialog.Dialog):
- def __init__(self, modal=1):
- dialog.Dialog.__init__(self, IDD_SET_TABSTOPS)
- self.counter = 0
- if modal:
- self.DoModal()
- else:
- self.CreateWindow()
-
- def OnInitDialog(self):
- # Set the caption of the dialog itself.
- self.SetWindowText("Used to be Tab Stops!")
- # Get a child control, remember it, and change its text.
- self.edit = self.GetDlgItem(IDC_EDIT_TABS) # the text box.
- self.edit.SetWindowText("Test")
- # Hook a Windows message for the dialog.
- self.edit.HookMessage(self.KillFocus, win32con.WM_KILLFOCUS)
- # Get the prompt control, and change its next.
- prompt = self.GetDlgItem(IDC_PROMPT_TABS) # the prompt box.
- prompt.SetWindowText("Prompt")
- # And the same for the button..
- cancel = self.GetDlgItem(IDCANCEL) # the cancel button
- cancel.SetWindowText("&Kill me")
-
- # And just for demonstration purposes, we hook the notify message for the dialog.
- # This allows us to be notified when the Edit Control text changes.
- self.HookCommand(self.OnNotify, IDC_EDIT_TABS)
-
- def OnNotify(self, controlid, code):
- if code == win32con.EN_CHANGE:
- print("Edit text changed!")
- return 1 # I handled this, so no need to call defaults!
-
- # kill focus for the edit box.
- # Simply increment the value in the text box.
- def KillFocus(self, msg):
- self.counter = self.counter + 1
- if self.edit != None:
- self.edit.SetWindowText(str(self.counter))
-
- # Called when the dialog box is terminating...
- def OnDestroy(self, msg):
- del self.edit
- del self.counter
-
-
- # A very simply Property Sheet.
- # We only make a new class for demonstration purposes.
- class TestSheet(dialog.PropertySheet):
- def __init__(self, title):
- dialog.PropertySheet.__init__(self, title)
- self.HookMessage(self.OnActivate, win32con.WM_ACTIVATE)
-
- def OnActivate(self, msg):
- pass
-
-
- # A very simply Property Page, which will be "owned" by the above
- # Property Sheet.
- # We create a new class, just so we can hook a control notification.
- class TestPage(dialog.PropertyPage):
- def OnInitDialog(self):
- # We use the HookNotify function to allow Python to respond to
- # Windows WM_NOTIFY messages.
- # In this case, we are interested in BN_CLICKED messages.
- self.HookNotify(self.OnNotify, win32con.BN_CLICKED)
-
- def OnNotify(self, std, extra):
- print("OnNotify", std, extra)
-
-
- # Some code that actually uses these objects.
- def demo(modal=0):
- TestDialog(modal)
-
- # property sheet/page demo
- ps = win32ui.CreatePropertySheet("Property Sheet/Page Demo")
- # Create a completely standard PropertyPage.
- page1 = win32ui.CreatePropertyPage(win32ui.IDD_PROPDEMO1)
- # Create our custom property page.
- page2 = TestPage(win32ui.IDD_PROPDEMO2)
- ps.AddPage(page1)
- ps.AddPage(page2)
- if modal:
- ps.DoModal()
- else:
- style = (
- win32con.WS_SYSMENU
- | win32con.WS_POPUP
- | win32con.WS_CAPTION
- | win32con.DS_MODALFRAME
- | win32con.WS_VISIBLE
- )
- styleex = win32con.WS_EX_DLGMODALFRAME | win32con.WS_EX_PALETTEWINDOW
- ps.CreateWindow(win32ui.GetMainFrame(), style, styleex)
-
-
- def test(modal=1):
- # dlg=dialog.Dialog(1010)
- # dlg.CreateWindow()
- # dlg.EndDialog(0)
- # del dlg
- # return
- # property sheet/page demo
- ps = TestSheet("Property Sheet/Page Demo")
- page1 = win32ui.CreatePropertyPage(win32ui.IDD_PROPDEMO1)
- page2 = win32ui.CreatePropertyPage(win32ui.IDD_PROPDEMO2)
- ps.AddPage(page1)
- ps.AddPage(page2)
- del page1
- del page2
- if modal:
- ps.DoModal()
- else:
- ps.CreateWindow(win32ui.GetMainFrame())
- return ps
-
-
- def d():
- dlg = win32ui.CreateDialog(win32ui.IDD_DEBUGGER)
- dlg.datalist.append((win32ui.IDC_DBG_RADIOSTACK, "radio"))
- print("data list is ", dlg.datalist)
- dlg.data["radio"] = 1
- dlg.DoModal()
- print(dlg.data["radio"])
-
-
- if __name__ == "__main__":
- demo(1)
|