代码之家  ›  专栏  ›  技术社区  ›  Marcus Grass

pyqt5管理一组按钮,而不必为每个按钮编写案例

  •  1
  • Marcus Grass  · 技术社区  · 7 年前

    我正在尝试创建一个布局,用户可以单击按钮组合,每个按钮的单击都会将1或0添加到列表中的某个位置,这是我想要从中得到的实际输入。 但是,我不知道如何管理一组按钮,有48个按钮,单独管理它们都是dry的对立面。

    举个例子:

    num_buttons=48
    按_List=[无]*len(num_按钮)
    button_list=list()。
    对于范围内的按钮(num_按钮):
    some_btn=qtwidgets.qpushbutton(somedialog)
    一些集合几何(qtcore.qrect(70、90、141、28))。
    某些btn.setobjectname(“button_u%s”%(button,))
    某些按钮已单击。连接(self.button\u pressed(button))。
    
    
    按下def按钮(self,button_num):
    如果按_list[按钮_num]==1:
    按_list[按钮_num]=0
    其他:
    按_list[按钮_num]=1
    < /代码> 
    
    

    (单击蓝色按钮),是否可以通过Qt设计器设置几何图形,并仍执行类似的操作,或者我必须计算设置几何图形的位置并通过代码添加按钮?

    下面是一个例子:

    num_buttons = 48
    press_list = [None]*len(num_buttons)
    button_list = list()
    for button in range(num_buttons):
        some_btn = QtWidgets.QPushButton(SomeDialog)
        some_btn.setGeometry(QtCore.QRect(70, 90, 141, 28))
        some_btn.setObjectName("button_%s" % (button,))
        some_btn.clicked.connect(self.button_pressed(button))
    
    
    def button_pressed(self, button_num):
        if press_list[button_num] == 1:
            press_list[button_num] = 0
        else:
            press_list[button_num] = 1
    

    Heres my QtDesigner layout

    (单击蓝色按钮),是否可以通过Qt设计器设置几何图形,并仍执行类似的操作,或者我必须计算设置几何图形的位置并通过代码添加按钮?

    1 回复  |  直到 7 年前
        1
  •  2
  •   eyllanesc    7 年前

    如果要向槽传递附加参数,可以使用分部,如下所示:

    导入系统 从functools导入部分 从pyqt5导入qtwidgets QSS=“” qtoolbutton::选中{ 背景色:蓝色 } “” 类小部件(qtwidgets.qwidget): 定义初始化(self,parent=none): super(widget,self)。初始化(父级) self.lista=[0代表范围(24)] self.listb=[0代表范围(24)] lay=qtwidgets.qvboxlayout(self) hlay1=qtwidgets.qhboxlayout()。 hlay2=qtwidgets.qhboxlayout()。 布局。添加布局(hlay1) 布局。添加布局(hlay2) 对于i,枚举中的val(self.lista): button=qtWidgets.qtoolbutton()。 button.setcheckable(真) hlay1.addwidget(按钮) button.clicked.connect(部分(self.callbacka,i)) 按钮设置样式表(QSS) 对于i,枚举中的val(self.listb): button=qtWidgets.qtoolbutton()。 button.setcheckable(真) hlay2.addwidget(按钮) button.clicked.connect(部分(self.callback,i)) 按钮设置样式表(QSS) def callbacka(self、index、state): self.lista[索引]=1,如果状态为0 打印(“lista:”) 打印(self.lista) def callback(self、index、state): self.listb[索引]=1,如果状态为0 打印(“列表B:”) 打印(self.listb) 如果“名称”= 导入系统 app=qtwidgets.qapplication(系统argv) W= WITGET() 显示() 系统退出(app.exec_u()) < /代码>

    enter image description here