不幸的是,由于其庞大且依赖于许多其他东西,我无法发布适当的代码供大家测试,因此提前向您道歉
因此,总体思路是我有一个面板,它显示来自日志的信息(一个名为dict
的CRDict
)。这个日志保存了过去的修订,我希望用户能够选择他们查看的版本。所以我将整个设置(基于self.CRDict
中的内容创建和填充sizer)移动到一个名为Display()
的函数中。此函数设置一个下拉列表并将其绑定到一个函数OnRevDrop()
,该函数允许用户选择要显示的修订。函数OnRevDrop()
决定由哪个函数将self.CRDict
分配给dict
,它保存所选修订的信息。在
问题是它只起一次作用。用户打开面板,显示当前修订,用户选择不同的修订,面板刷新并显示所选修订的信息,然后用户选择另一个修订,它将中断并给出一个KeyError
。错误是因为在下拉菜单中调用GetValue()
函数会返回一个空字符串。这是我问题的根源,尽管我不知道如何解决它。在
有人知道为什么会发生这种情况吗?在
提前谢谢
import wx
from wx.lib.scrolledpanel import ScrolledPanel
rev1 = {"A": "a", "B": "b", "C": "c"}
rev2 = {"A": "d", "B": "e", "C": "f"}
rev3 = {"A": "g", "B": "h", "C": "i"}
RevHist = {"1":rev1, "2":rev2, "3":rev3}
class TestGui(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, "Hey, a GUI!", size=(400,400))
self.panel = ScrolledPanel(parent=self, id=-1)
self.revsList = sorted(RevHist.keys())
self.CRDict = rev3
self.Display()
self.revDrop.SetValue("3")
def Display(self):
crrev = wx.StaticText(self.panel, -1, "Revision:")
self.revDrop = wx.ComboBox(self.panel, choices=self.revsList, style = wx.CB_READONLY)
self.Bind(wx.EVT_COMBOBOX, self.OnRevDrop, self.revDrop)
hboxRev = wx.BoxSizer(wx.HORIZONTAL)
hboxRev.Add((20,20), 1)
hboxRev.Add(crrev)
hboxRev.Add((0,0), 1)
hboxRev.Add(self.revDrop)
hboxRev.Add((20,20), 1)
sbox1 = wx.StaticBox(self.panel, wx.ID_ANY, u"Here's where the information goes")
sbox1.SetFont(wx.Font(9, wx.SWISS, wx.NORMAL, wx.BOLD))
self.staticbox1 = wx.StaticBoxSizer(sbox1, wx.VERTICAL)
infoA = wx.StaticText(self.panel, -1, "A: {}".format(self.CRDict["A"]))
infoB = wx.StaticText(self.panel, -1, "B: {}".format(self.CRDict["B"]))
infoC = wx.StaticText(self.panel, -1, "C: {}".format(self.CRDict["C"]))
self.staticbox1.Add(infoA, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP|wx.BOTTOM, border=10)
self.staticbox1.Add(infoB, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP|wx.BOTTOM, border=10)
self.staticbox1.Add(infoC, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP|wx.BOTTOM, border=10)
self.vbox = wx.BoxSizer(wx.VERTICAL)
self.vbox.Add(hboxRev, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP|wx.BOTTOM, border=10)
self.vbox.Add(self.staticbox1, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP|wx.BOTTOM, border=10)
self.panel.SetSizer(self.vbox)
self.panel.Layout()
def OnRevDrop(self, event):
rev = self.revDrop.GetValue()
print rev
self.CRDict = RevHist[rev]
self.Display()
app = wx.PySimpleApp()
gui = TestGui()
gui.Show()
app.MainLoop()
问题是每次都要创建新的GUI元素,而不是简单地更新原始GUI元素
虽然我喜欢创造一个混合体
^{pr2}$你需要吸气剂
然后你就可以做一些
相关问题 更多 >
编程相关推荐