gpt4 book ai didi

python - 更新/刷新动态创建的 WxPython 小部件

转载 作者:太空宇宙 更新时间:2023-11-03 14:31:19 26 4
gpt4 key购买 nike

这里是新的 Python 程序员,正在尝试学习如何动态更新小部件。首先,我有以下代码。我想做的是将我的变量“self.dynamylength”更改为任何整数,并让 WxPython 适本地更新小部件的数量。在更新 self.dynamylength 无济于事之后,我尝试将 self.Refresh() 和 self.Update() 放入我的 TestFrame 中。

在寻求帮助之前,我已经尽可能多地阅读了这方面的资料,但我对 Wx 还太陌生,无法自己解决这个问题。非常感谢!

import wx
import wx.lib.scrolledpanel as scrolled

class TestFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, size=(1000, 550))
panel = wx.Panel(self)

mainSizer = wx.BoxSizer(wx.VERTICAL)
pbox0 = wx.BoxSizer(wx.VERTICAL)
controlback0 = wx.Button(panel, label="Back0")
controlforward0 = wx.Button(panel, label="Forward0")
pbox0.Add(controlback0, 0, wx.ALL)
pbox0.Add(controlforward0, 0, wx.ALL)
mainSizer.Add(pbox0)

self.scrolling_window = scrolled.ScrolledPanel( panel )
self.scrolling_window.SetAutoLayout(1)
self.scrolling_window.SetupScrolling()
self.sizer = wx.BoxSizer( wx.VERTICAL )
self.child_windows = []

##############################################
#this is the variable that I want to change,
#and I don't know how to get the 'for loop'
#below to update as well.

self.eedictionary = {}
self.dynamiclength = 5
for i in range(0,self.dynamiclength):
wind = self.addBox(i)
self.sizer.Add(wind, 0, wx.CENTER|wx.ALL, 5)
###############################################
#the following code binds all appropriate buttons to a pedigree variable updater
button_binding_list = ['controlback','controlforward']
for j in button_binding_list:
eid = self.eedictionary[str(i)+j]
self.scrolling_window.Bind(wx.EVT_BUTTON, lambda evt: self.onclick(evt, id), id=eid)

self.scrolling_window.SetSizer(self.sizer)

mainSizer.Add(self.scrolling_window, 1, wx.EXPAND)
panel.SetSizer(mainSizer)

def addBox(self, i):
pbox = wx.BoxSizer(wx.VERTICAL)

controlback = wx.Button(self.scrolling_window, label="Back")
controlforward = wx.Button(self.scrolling_window, label="Forward")

pbox.AddMany([(controlback, 0, wx.ALL), (controlforward, 0, wx.ALL)])

#for each object created in the addBox module, its id is added to the dictionary
self.eedictionary[str(i)+'controlback'] = controlback.GetId()
self.eedictionary[str(i)+'controlforward'] = controlforward.GetId()
return pbox

def onclick(self, event):
self.dynamiclength +=1
print 'added one to self.dynamiclength', self.dynamiclength

if __name__=='__main__':
app = wx.App(False)
f = TestFrame()
f.Show()
app.MainLoop()

最佳答案

我有一段时间以前写过的类似测试代码。也许您会发现它很有用。

import wx

#===================================================================================================
class UpperPanel(wx.Panel):
def __init__(self, *args, **kwargs):
wx.Panel.__init__(self, *args, **kwargs)
self.combo = wx.ComboBox(self, choices=["0", "1", "2", "3", "4"], size=(200, -1))
self.combo.Bind(wx.EVT_COMBOBOX, self.GetParent().middlePanel.Change)
self.logo = wx.Button(self, size=(300, 100))

self.sizer = wx.BoxSizer()
self.sizer.Add(self.combo, 0, wx.EXPAND)
self.sizer.Add(self.logo, 0, wx.EXPAND)

self.SetSizerAndFit(self.sizer)

#===================================================================================================
class MiddlePanel(wx.Panel):
def __init__(self, *args, **kwargs):
wx.Panel.__init__(self, *args, **kwargs)
self.subs = []
self.sizer = wx.BoxSizer(wx.VERTICAL)
self.SetSizerAndFit(self.sizer)


def Change(self, e):
self.sizer = wx.BoxSizer(wx.VERTICAL)

for a in self.subs:
a.Destroy()

self.subs = []

for a in range(int(e.GetString())):
b = wx.Button(self, size=(-1, 50))
self.subs.append(b)
self.sizer.Add(b, 1, wx.EXPAND)

self.SetSizerAndFit(self.sizer)
self.GetParent().Fit()

#===================================================================================================
class MainWin(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None)

self.middlePanel = MiddlePanel(self)
self.upperPanel = UpperPanel(self)
self.textArea = wx.TextCtrl(self, size=(-1, 300), style=wx.TE_MULTILINE)

self.sizer = wx.BoxSizer(wx.VERTICAL)
self.sizer.Add(self.upperPanel, 0, wx.EXPAND)
self.sizer.Add(self.middlePanel, 0, wx.EXPAND)
self.sizer.Add(self.textArea, 1, wx.EXPAND)

self.SetSizerAndFit(self.sizer)

#===================================================================================================
if __name__ == '__main__':
app = wx.PySimpleApp()
main_win = MainWin()
main_win.Show()
app.MainLoop()

关于python - 更新/刷新动态创建的 WxPython 小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10368948/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com