2017-07-08 44 views
0
# -*- 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:在条件表达式中似乎存在问题。

回答

1

目前还不清楚你在这段代码中试图达到什么目的。
您的测试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) 
+0

再次感谢您。我再次从你身上学到了很多东西。我认为当组合框改变时有一个中间值发生了变化,但它不是。祝你有美好的一天:) –

+0

查看我对“EVT_TEXT”的编辑 –