137 lines
4 KiB
Python
137 lines
4 KiB
Python
# 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.
|
|
#
|
|
from win32ui import IDD_SET_TABSTOPS
|
|
from win32ui import IDC_EDIT_TABS
|
|
from win32ui import IDC_PROMPT_TABS
|
|
from win32con import IDOK
|
|
from win32con import IDCANCEL
|
|
|
|
import win32ui
|
|
import win32con
|
|
|
|
from pywin.mfc import dialog
|
|
|
|
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)
|