我试图从我的pygame应用程序运行的wx对话框中获取一些值。我对wxPython完全陌生,从来没有做过任何OOP,所以我需要一些帮助。现在它是一种工作,至少对话框显示和关闭成功。但是我不知道在对话框关闭后需要向对话框方法添加什么来处理对话框的输入。我把相关代码放在这里。它使用来自http://zetcode.com/wxpython/dialogs/的示例
我的dial.py
模块:
import wx
class OptionsDial(wx.Dialog):
def __init__(self, *args, **kw):
super(OptionsDial, self).__init__(*args, **kw)
self.InitUI()
self.SetSize((300, 200))
self.SetTitle("Import options")
def InitUI(self):
pnl = wx.Panel(self)
vbox = wx.BoxSizer(wx.VERTICAL)
sb = wx.StaticBox(pnl, label='Import')
sbs = wx.StaticBoxSizer(sb, orient=wx.VERTICAL)
sbs.Add(wx.RadioButton(pnl, label='PNG', style=wx.RB_GROUP))
sbs.Add(wx.RadioButton(pnl, label='TIFF'))
sbs.Add(wx.RadioButton(pnl, label='JPEG'))
pnl.SetSizer(sbs)
hbox2 = wx.BoxSizer(wx.HORIZONTAL)
okButton = wx.Button(self, label='Ok')
closeButton = wx.Button(self, label='Close')
hbox2.Add(okButton)
hbox2.Add(closeButton, flag=wx.LEFT, border=5)
vbox.Add(pnl, proportion=1, flag=wx.ALL|wx.EXPAND, border=5)
vbox.Add(hbox2, flag=wx.ALIGN_CENTER|wx.TOP|wx.BOTTOM, border=10)
self.SetSizer(vbox)
okButton.Bind(wx.EVT_BUTTON, self.OnClose)
closeButton.Bind(wx.EVT_BUTTON, self.OnClose)
def OnClose(self, e):
self.Destroy()
self.Close()
请注意,我必须在onClose方法中添加self.Close()
行,否则根本不起作用。在我的主程序中,我这样称呼它(它不读取所选的选项,现在我只是试图让它返回一些不同的结果,这取决于现在按下哪个按钮,我被卡住了):
def options() :
ff = "PNG"
app = wx.App(None)
dlg = dial.OptionsDial(None)
if dlg.ShowModal() == wx.ID_OK :
ff = "JPG"
return ff
现在我的函数总是返回“PNG”。那么如何使其返回值取决于: 1选择单选按钮(实际上我只需要单选按钮的索引) 2按下按钮(在这种情况下为Ok或Close)
遗憾的是,页面末尾的zetcode
wx.Dialog
示例既不聪明也不明智。不要破坏对话框中的对话框。你知道吗事后销毁它,这样你就可以事先读出设置了。你知道吗
当然,为了能够读出您的无线电选择,您必须使RBs可以从
wx.Dialog
实例外部访问。你知道吗相关问题 更多 >
编程相关推荐