有没有一种有效的方法来处理多个复选框来更改wxPython中的一个变量?

马辛-维特科夫斯基

我正在使用带有很多用户可更改选项的wxPython应用程序。这导致很多复选框需要以某种方式进行处理。

当时,我的代码如下所示:

        self.checkbox1=wx.CheckBox(self.panel,label='Do X')
        self.checkbox1.Bind(wx.EVT_CHECKBOX,self.DoXCheckboxHandler)
        self.checkbox1.SetValue(True)
        self.sizer.Add(self.checkbox1,0,wx.ALL|wx.EXPAND,5)

        self.checkbox2=wx.CheckBox(self.panel,label='Do Y')
        self.checkbox2.Bind(wx.EVT_CHECKBOX,self.DoYCheckboxHandler)
        self.checkbox2.SetValue(True)
        self.sizer.Add(self.checkbox2,0,wx.ALL|wx.EXPAND,5)
...
    def DoXCheckboxHandler(self,event):
        self.DoX=self.checkbox1.GetValue()
        self.RefreshUserView(self)

    def DoYCheckboxHandler(self,event):
        self.DoY=self.checkbox2.GetValue()
        self.RefreshUserView(self)
...

有没有更有效的方式(就代码长度而言)来处理多个复选框,这些复选框实际上只更改一个变量,然后调用一个相同的函数?我的方法虽然运行良好,但似乎有很多不必要的重复?

当然,一种方法是完全跳过“额外”变量-但是,实际上,我需要将这些变量与小部件分开放置,因为即使小部件被销毁,我也需要这些值(关闭选项框后,例如)。

所有建议将不胜感激。

萨克森罗夫

您可能要编辑问题标题“处理多个更改一个变量的复选框”,因为它似乎不适合以下文本。似乎有多个变量。
在这种情况下,最简单的方法之一就是将变量名和值存储在字典中,并使用事件对象GetName()功能更新值
这是一个例子:

import wx
import wx.lib.agw.ultimatelistctrl as ULC

class MyFrame(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, parent, -1, "Days and Hours Checkbox Grid", size=(600,300))
        agwStyle = (ULC.ULC_HAS_VARIABLE_ROW_HEIGHT | wx.LC_REPORT | wx.LC_VRULES | wx.LC_HRULES | wx.LC_SINGLE_SEL)
        self.mylist = mylist = ULC.UltimateListCtrl(self, wx.ID_ANY, agwStyle=agwStyle)

        # Load headings
        mylist.InsertColumn(0,"Weekday", width=100)
        for col in range(1,25):
            col_num=str(col-1)
            mylist.InsertColumn(col,col_num, width=20)

        # Dictionary to Store checkbox variable names and values
        self.variables = {}

        # Load Side headings
        days=['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']
        for day in range(7):
            mylist.InsertStringItem(day, str(days[day]))

        # Load checkboxes
        for boxes in range(1,25):
            for index in range(7):
                day = days[index]
                hour = boxes-1
                name_of_checkbox = "{day}_{hour}".format(day=day, hour=hour)
                self.checkBox = wx.CheckBox(mylist, wx.ID_ANY, "", wx.DefaultPosition, wx.DefaultSize, 0,name=name_of_checkbox)
        # Store individual checkbox variable names and values in a dictionary
                self.variables[name_of_checkbox] = False

                mylist.SetItemWindow(index, boxes, self.checkBox)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(mylist, 1, wx.EXPAND)
        button = wx.Button(self,-1,"Print Data")
        sizer.Add(button)
        self.Bind(wx.EVT_CHECKBOX, self.OnChecked)
        self.Bind(wx.EVT_BUTTON, self.OnGetData)
        self.SetSizer(sizer)

    def OnChecked(self,event):
        clicked = event.GetEventObject()
        variable_name = clicked.GetName()
        self.variables[variable_name] = event.IsChecked()
        if event.IsChecked():
            print(variable_name,"from False to True")
        else:
            print(variable_name,"from True to False")

    def OnGetData(self,event):
        for i,v in self.variables.items():
            print(i,v)

app = wx.App()
frame = MyFrame(None)
frame.Show()
app.MainLoop()

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有没有一种有效的方法来保存变量并在python中顺序更改文件名?

来自分类Dev

有没有一种有效的方法来执行带有两个变量的选择语句?

来自分类Dev

需要一种有效的方法来处理C ++中的ReadDirectoryChangesW

来自分类Dev

有没有一种有效的方法来从字典中检索值

来自分类Dev

有没有一种有效的方法来搜索非常大的文件中的字典?

来自分类Dev

有没有一种有效的方法来计算比特流中 1 的密度?

来自分类Dev

有没有一种有效的方法来搜索列表,而另一个列表保持列表的顺序呢?

来自分类Dev

有没有一种方法可以有效地更新带有复选框的大型表单?

来自分类Dev

有没有一种快速的方法来绘制Scilab中的多个图

来自分类Dev

有没有一种有效的方法来对参数映射进行排序?

来自分类Dev

有没有一种非常有效的方法来防止从页面复制.jpg文件?

来自分类Dev

有没有一种有效的方法来连接字符串

来自分类Dev

有没有一种有效的方法来用另一种有效的方法替换数据框中的值?

来自分类Dev

有没有更简单的方法来处理复选框?

来自分类Dev

有没有一种有效的方法来区分由npm list填充的两个依赖关系树?

来自分类Dev

有没有一种有效的方法来覆盖Appengine实体中的get()和put()方法,以使其使用内存缓存?

来自分类Dev

有没有一种有效的方法来选择大熊猫数据框中的多行?

来自分类Dev

有没有一种比Python中的list.sort()更有效的方法来对列表进行排序?

来自分类Dev

有没有一种有效的方法来对PHP中的打包字符串进行排序?

来自分类Dev

有没有一种真正有效(FAST)的方法来读取python中的大文本文件?

来自分类Dev

有没有一种有效的方法来将redux与react一起使用而没有react-redux?

来自分类Dev

有没有一种使用ACL的方法来让多个组拥有一个文件夹?

来自分类Dev

有没有一种标准的方法来表示Scala中从一个对象到另一个对象的转换?

来自分类Dev

有没有一种通用的方法来打印变量?

来自分类Dev

有没有一种方法来检查instanceof基本变量java

来自分类Dev

有没有一种优雅的方法来检查多个条件?

来自分类Dev

有没有一种方法来获取多个列表python的索引?

来自分类Dev

关系更改时,有没有一种很好的方法来更新NSManagedObject?

来自分类Dev

有没有一种方法可以“冻结” PyQt5中复选框的状态?

Related 相关文章

  1. 1

    有没有一种有效的方法来保存变量并在python中顺序更改文件名?

  2. 2

    有没有一种有效的方法来执行带有两个变量的选择语句?

  3. 3

    需要一种有效的方法来处理C ++中的ReadDirectoryChangesW

  4. 4

    有没有一种有效的方法来从字典中检索值

  5. 5

    有没有一种有效的方法来搜索非常大的文件中的字典?

  6. 6

    有没有一种有效的方法来计算比特流中 1 的密度?

  7. 7

    有没有一种有效的方法来搜索列表,而另一个列表保持列表的顺序呢?

  8. 8

    有没有一种方法可以有效地更新带有复选框的大型表单?

  9. 9

    有没有一种快速的方法来绘制Scilab中的多个图

  10. 10

    有没有一种有效的方法来对参数映射进行排序?

  11. 11

    有没有一种非常有效的方法来防止从页面复制.jpg文件?

  12. 12

    有没有一种有效的方法来连接字符串

  13. 13

    有没有一种有效的方法来用另一种有效的方法替换数据框中的值?

  14. 14

    有没有更简单的方法来处理复选框?

  15. 15

    有没有一种有效的方法来区分由npm list填充的两个依赖关系树?

  16. 16

    有没有一种有效的方法来覆盖Appengine实体中的get()和put()方法,以使其使用内存缓存?

  17. 17

    有没有一种有效的方法来选择大熊猫数据框中的多行?

  18. 18

    有没有一种比Python中的list.sort()更有效的方法来对列表进行排序?

  19. 19

    有没有一种有效的方法来对PHP中的打包字符串进行排序?

  20. 20

    有没有一种真正有效(FAST)的方法来读取python中的大文本文件?

  21. 21

    有没有一种有效的方法来将redux与react一起使用而没有react-redux?

  22. 22

    有没有一种使用ACL的方法来让多个组拥有一个文件夹?

  23. 23

    有没有一种标准的方法来表示Scala中从一个对象到另一个对象的转换?

  24. 24

    有没有一种通用的方法来打印变量?

  25. 25

    有没有一种方法来检查instanceof基本变量java

  26. 26

    有没有一种优雅的方法来检查多个条件?

  27. 27

    有没有一种方法来获取多个列表python的索引?

  28. 28

    关系更改时,有没有一种很好的方法来更新NSManagedObject?

  29. 29

    有没有一种方法可以“冻结” PyQt5中复选框的状态?

热门标签

归档