【问题标题】:How to dynamically create check boxes or buttons in Wxpython?如何在 Wxpython 中动态创建复选框或按钮?
【发布时间】:2013-06-19 05:57:32
【问题描述】:
posx = 50
for name in sheets:
    wx.CheckBox(self, -1 ,name, (15, posx))
    posx = posx + 20

当我执行此操作时,复选框出现但它们不起作用,这意味着我无法选中任何框,动态添加复选框或按钮的正确方法是什么?

我现在已经编辑了我的代码并将其添加到面板中,现在复选框甚至都没有出现

pnl = wx.Panel(self)
posx = 50
for name in sheets:
    cb = wx.CheckBox(pnl, label=name, pos=(20, posx))
    cb.SetValue(True)
    cb.Bind(wx.EVT_CHECKBOX, self.doSomething)
    posx = posx + 20

def doSomething(Self,e):
sender = e.GetEventObject()
isChecked = sender.GetValue()

if isChecked:
    #do something here            
else: 
    #do something else here       

【问题讨论】:

  • 你必须将它添加到面板或框架中,然后上面的代码才能工作
  • @BinayakaChakraborty:请检查编辑,我做错了吗?
  • 查看稻草人的答案 :)

标签: python python-2.7 wxpython


【解决方案1】:

这行得通。

import wx

class MyApp(wx.App):

  def OnInit(self):
    frame = InsertFrame(parent=None, id=-1)
    frame.Show()
    return True

class InsertFrame(wx.Frame):

  def __init__(self, parent, id):
    wx.Frame.__init__(self, parent, id, 'Test Frame', size = (300,100))
    panel = wx.Panel(self)
    pos_y = 0
    for i in range(50):
      pos_y += 20
      cb = wx.CheckBox(panel, label="sample checkbox", pos=(20, pos_y))

if __name__ == "__main__":
  app = MyApp()
  app.MainLoop()

这只是设置带有复选框的小部件。

输出:

【讨论】:

    【解决方案2】:
    1. 复选框类 -> http://wxpython.org/docs/api/wx.CheckBox-class.html

    2. 按钮类 -> http://wxpython.org/docs/api/wx.Button-class.html

    3. 复选框示例代码:

        #!/usr/bin/python
       # -*- coding: utf-8 -*-
      
        import wx
      
      
        class Example(wx.Frame):
      
        def __init__(self, *args, **kw):
        super(Example, self).__init__(*args, **kw) 
      
        self.InitUI()
      
        def InitUI(self):   
      
         pnl = wx.Panel(self)
      
         cb = wx.CheckBox(pnl, label='Show title', pos=(20, 20))
         cb.SetValue(True)
      
         cb.Bind(wx.EVT_CHECKBOX, self.ShowOrHideTitle)
      
         self.SetSize((250, 170))
         self.SetTitle('wx.CheckBox')
         self.Centre()
         self.Show(True)    
      
      def ShowOrHideTitle(self, e):
      
        sender = e.GetEventObject()
        isChecked = sender.GetValue()
      
        if isChecked:
          self.SetTitle('wx.CheckBox')            
        else: 
          self.SetTitle('')        
      
       def main():
      
       ex = wx.App()
        Example(None)
        ex.MainLoop()    
      
       if __name__ == '__main__':
       main()   
      
    4. 按钮示例代码:

      import wx
      
      class MyFrame(wx.Frame):
         """make a frame, inherits wx.Frame"""
      
      def __init__(self):
         # create a frame, no parent, default to wxID_ANY
      
       wx.Frame.__init__(self, None, wx.ID_ANY, 'wxButton',
      
       pos=(300, 150), size=(320, 250))
       self.SetBackgroundColour("green")
       self.button1 = wx.Button(self, id=-1, label='Button1',
       pos=(8, 8), size=(175, 28))
       self.button1.Bind(wx.EVT_BUTTON, self.button1Click)
        # optional tooltip
        self.button1.SetToolTip(wx.ToolTip("click to hide"))
      
        # show the frame 
         self.Show(True)
          def button1Click(self,event):
          self.button1.Hide()
          self.SetTitle("Button1 clicked")
          self.button2.Show()
      
          application = wx.PySimpleApp()
          # call class MyFrame
          window = MyFrame()
          # start the event loop
          application.MainLoop()
      
    5. 所有其他 wxpython 小部件的好教程:(wx.Button wx.ToggleButton, wx.StaticLine, wx.StaticText, wx.StaticBox wx.ComboBox、wx.CheckBox、wx.StatusBar、wx.RadioButton、wx.Gauge、wx.Slider 和 wx.SpinCtrl) -> http://zetcode.com/wxpython/widgets/

    【讨论】:

      猜你喜欢
      • 2016-11-28
      • 2016-01-09
      • 1970-01-01
      • 1970-01-01
      • 2019-03-18
      • 2014-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多