【发布时间】:2014-03-13 21:09:42
【问题描述】:
我正在处理我的第一个 wxpython 项目,但我偶然发现了一个我无法解决的问题。基本上我有一个带有组合框和嵌入框架中的状态栏的面板。当我在组合框中选择一个项目时,我希望所选项目显示在状态栏中。这工作得很好。但我想要的是,当框架弹出时,组合框中的初始选择也已经显示在状态栏中。后者没有发生,我不明白为什么。因为我的应用非常复杂,所以我想通过使用 pubsub 来解决这个问题。
我做了一个最小的工作示例来演示问题所在。请注意,当框架打开时,状态栏是空的,但它应该显示组合框中的初始值。另外,我不知道为什么组合框中的当前项目被突出显示。有什么想法吗?
顺便说一句:我是 python 编程的新手,所以如果应该或可以以更 Python 的方式编写某些内容,我也会感谢我的代码中的一些 cmets。
好的,提前感谢您的帮助。最后,代码如下(我用的是wxpython 3.0):
import wx
from wx.lib.pubsub import pub
class CtrlPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent, -1, style = wx.SUNKEN_BORDER)
self.lstCombo = wx.ComboBox(self, -1)
self.lstCombo.Bind(wx.EVT_COMBOBOX, self.onSelect)
self.get_data()
def get_data(self):
self.lst = range(1,10)
self.lst = [str(x) for x in self.lst]
self.lstCombo.Clear()
self.lstCombo.AppendItems(self.lst)
self.lstCombo.SetValue(self.lst[2])
pub.sendMessage('F.Change', fobj=self.lstCombo.GetValue())
def onSelect(self, event):
pub.sendMessage('F.Change', fobj=self.lstCombo.GetValue())
class MainFrame(wx.Frame):
""" The main frame of the application
"""
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title)
self.ctrl_panel = CtrlPanel(self)
self.statusbar = self.CreateStatusBar()
pub.subscribe(self.change_StatusBarText, 'F.Change')
def change_StatusBarText(self, fobj):
self.SetStatusText(fobj)
def main():
app = wx.App(redirect=False)
frame = MainFrame(None, "Test")
frame.Centre()
frame.Show(True)
app.MainLoop()
if __name__ == '__main__':
main()
【问题讨论】:
标签: combobox wxpython statusbar publish-subscribe