如何在wxpython中更新wxStatic文本?
我一直在尝试更新wxStaticText,但不想让已有的文本重叠。我想我遇到的问题是没有为每个StaticText设置变量名。完整代码在这里: http://pastebin.com/Y5k9qEa8
start=70
for i in newfp:
#Gets info from website
wx.StaticText(self.frame,-1,str(newname),pos=(50,start))
self.static = wx.StaticText(self.frame,-1,price,pos=(250,start))
start+=50
然后我有一个刷新按钮,可以再次运行相同的过程,但如果信息发生变化,就会出现重叠。我需要知道如何确保它不会重叠。提前谢谢大家!期待你们的回答!
1 个回答
2
你需要保存一个引用,然后使用 self.my_static_text.SetLabel("Some New Text!")
来更新文本。
也就是说,
import wx
messages = ["Hello","World","Python"]
a = wx.App(redirect=False)
f = wx.Dialog(None,-1,"Changing Text!")
te = wx.StaticText(f,-1,"Changes!")
btn = wx.Button(f,-1,"Change The Text",pos=(10,25))
btn.Bind(wx.EVT_BUTTON,lambda evt:te.SetLabel(messages.pop(0)) or messages.append(te.GetLabel()))
f.ShowModal()
在你的情况下,你可以保持一个列表。
self.my_items,self.my_prices = [],[]
items = [("item1",50),("item2",75),("item3",88)]
for i,(itemName,itemPrice) in enumerate(items):
self.my_items.append(wx.StaticText(self.frame,-1,itemName,pos=(50,start+i*50)))
self.my_prices.append(wx.StaticText(self.frame,-1,itemPrice,pos=(250,start+i*50)))
这里有一个完整的例子,适合你的情况……这也可以作为你在未来提问时,我们希望看到的可运行示例的参考。
import wx
class MyFrame(wx.Frame):
def __init__(self,items):
wx.Frame.__init__(self,None,-1,"Demo")
self.start_y = 25
self.my_items,self.my_prices = [],[]
for i,(iName,iPrice) in enumerate(items):
self.my_items.append(wx.StaticText(self,-1,iName,pos=(50,self.start_y+50*i)))
self.my_prices.append(wx.StaticText(self,-1,str(iPrice),pos=(90,self.start_y+50*i)))
btn = wx.Button(self,-1,"Next Items")
btn.Bind(wx.EVT_BUTTON,self.OnNext)
def OnNext(self,evt):
for t1,t2 in zip(self.my_items,self.my_prices):
t1.Destroy()
t2.Destroy()
self.my_items,self.my_prices = [],[]
items = itemSets.pop(0)
for i,(iName,iPrice) in enumerate(items):
self.my_items.append(wx.StaticText(self,-1,iName,pos=(50,self.start_y+50*i)))
self.my_prices.append(wx.StaticText(self,-1,str(iPrice),pos=(90,self.start_y+50*i)))
itemSets.append(items)
itemSets = [
[("item1",25),("item2",35),("item3",55)],
[("item3",44),("item4",65),("item5",75)],
[("item5",66),("item6",78),("item7",93)],
]
a = wx.App(redirect=None)
f = MyFrame([("ItemA",33),("ItemB",44),("ItemC",66)])
f.Show()
a.MainLoop()