如何获取wxpython组合框选择和更改值?
问题描述:
# -*- coding: utf-8 -*-
import wx
class Main(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, size=(430,550))
self.mainPanel = wx.Panel(self, size=(0,500))
self.data1 = [1,2,3]
self.data2 = ['google','amazon']
self.listCtrl = wx.ListCtrl(self.mainPanel, size=(0,0), style=wx.LC_REPORT|wx.BORDER_SUNKEN)
self.listCtrl.InsertColumn(0, 'ONE', format=wx.LIST_FORMAT_CENTRE, width=wx.LIST_AUTOSIZE_USEHEADER)
self.listCtrl.InsertColumn(1, 'TWO', format=wx.LIST_FORMAT_CENTRE, width=wx.LIST_AUTOSIZE)
self.listCtrl.InsertColumn(2, 'THREE', format=wx.LIST_FORMAT_CENTRE, width=wx.LIST_AUTOSIZE)
self.ComboBoxs = wx.ComboBox(self.mainPanel, choices=self.data2, style=wx.CB_READONLY)
self.ComboBoxs.Bind(wx.EVT_COMBOBOX, self.ComboSelect, self.ComboBoxs)
self.textLabel = wx.StaticText(self.mainPanel)
self.autoRefreshCount = 0
self.BoxSizer = wx.BoxSizer(wx.VERTICAL)
self.BoxSizer.Add(self.ComboBoxs, 0, wx.ALL, 5)
self.BoxSizer.Add(self.listCtrl, 1, wx.EXPAND | wx.ALL, 5)
self.BoxSizer.Add(self.textLabel, 0, wx.EXPAND | wx.ALL, 5)
self.mainPanel.SetSizer(self.BoxSizer)
self.timer = wx.Timer(self)
self.Bind(wx.EVT_TIMER, self.autoRefresh, self.timer)
self.timer.Start(5000)
self.ComboSelect(self)
def ComboSelect(self, event):
self.listCtrl.Append(self.data1)
def autoRefresh(self, evnet):
if self.ComboBoxs.GetStringSelection() in self.data2:
self.ComboSelect(self)
self.textLabel.SetLabel('count : ' + str(self.autoRefreshCount))
self.autoRefreshCount += 1
else:
self.textLabel.SetLabel('count : ' + str(0))
self.autoRefreshCount = 0
if __name__ == '__main__':
app = wx.App()
frame = Main()
frame.Show(True)
app.MainLoop()
我在组合框选择值后创建了一个自动导入。如何获取wxpython组合框选择和更改值?
如果问题更改组合框选择,则必须初始化更改的值self.textLabel.SetLabel ('count:' + str (self.autoRefreshCount))
。
我试了很多,但我不知道该怎么做。
if self.ComboBoxs.GetStringSelection() in self.data2:
在条件表达式中似乎存在问题。
答
目前还不清楚你在这段代码中试图达到什么目的。
您的测试if self.ComboBoxs.GetStringSelection() in self.data2:
始终为True
,因为self.ComboBoxs
是只读的,因此无法更改,因此无论选择什么,它总是在self.data2
。
尝试以下更换,看看它是否让你更接近你想要的。
def ComboSelect(self, event):
# self.listCtrl.Append(self.data1)
self.autoRefreshCount = 0
def autoRefresh(self, evnet):
# if self.ComboBoxs.GetStringSelection() in self.data2:
# self.ComboSelect(self)
self.listCtrl.Append(self.data1)
self.textLabel.SetLabel('count : ' + str(self.autoRefreshCount))
self.autoRefreshCount += 1
# else:
# self.textLabel.SetLabel('count : ' + str(0))
# self.autoRefreshCount = 0
编辑:
根据您的意见,我怀疑你想要的是EVT_TEXT
此事件在组合框中的文本更改。
把它这样绑住,看看这是你在找什么。
self.ComboBoxs.Bind(wx.EVT_TEXT, self.ComboChange, self.ComboBoxs)
再次感谢您。我再次从你身上学到了很多东西。我认为当组合框改变时有一个中间值发生了变化,但它不是。祝你有美好的一天:) –
查看我对“EVT_TEXT”的编辑 –