2017-07-08 14 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'についての私の編集を見る –

関連する問題