首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pyside setCheckable

pyside setCheckable
EN

Stack Overflow用户
提问于 2018-09-13 11:30:44
回答 1查看 331关注 0票数 0

我想创建一个保持按下状态直到用户再次按下它的QPushButton。我知道我可以使用setCheckable来做这件事。但我不确定如何为按钮创建一个适当的信号,当按钮改变状态时触发,按下和未按下。Toggled似乎起作用了,但它正在发送3个参数。我不确定在我的示例中发送的3个参数是什么。

代码语言:javascript
复制
import maya.cmds as cmds
import os
import maya.OpenMayaUI as mui
from PySide2 import QtWidgets,QtCore,QtGui
import shiboken2

class widget():
    def __init__(self):
        self.objs = ["box_1","box_2","box_3"]

    def label_event(self,text):
        print("this is the pressed button's label", text)

    def populate(self):
        for obj in self.objs:
            label = QtWidgets.QPushButton(obj)
            label.setCheckable(True)
            label.toggled.connect(partial(self.label_event, obj))
            self.vertical_layout_main.addWidget(label)

    def palette_ui(self):
        windowName = "palette"
        if cmds.window(windowName,exists = True):
            cmds.deleteUI(windowName, wnd = True)
        pointer = mui.MQtUtil.mainWindow()
        parent = shiboken2.wrapInstance(long(pointer),QtWidgets.QWidget)
        self.window = QtWidgets.QMainWindow(parent)
        self.window.setObjectName(windowName)
        self.window.setWindowTitle(windowName)
        self.mainWidget = QtWidgets.QWidget()
        self.window.setCentralWidget(self.mainWidget)
        self.vertical_layout_main = QtWidgets.QVBoxLayout(self.mainWidget)
        self.populate()        
        self.window.setAttribute(QtCore.Qt.WA_DeleteOnClose)
        self.window.show()        

lg = widget()
lg.palette_ui()
EN

回答 1

Stack Overflow用户

发布于 2018-09-13 11:45:10

您必须使用setCheckable(True)激活该属性并使用toggled信号:

代码语言:javascript
复制
import sys
from PySide import QtGui

def function(checked):
    print("is checked?: ", checked)

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)

    button = QtGui.QPushButton("press me")
    button.setCheckable(True)

    button.toggled.connect(function)

    button.show()
    sys.exit(app.exec_())

更新:

Do not use object是一个保留字,另一方面信号传递检查的参数,如果你想传递另一个参数,你也必须把它放在函数中:

代码语言:javascript
复制
def label_event(self, text, checked): # <---
    print("this is the pressed button's label", text, checked)

def populate(self):
    for obj in self.objects:
        label = QtWidgets.QPushButton(obj)
        label.setCheckable(True)
        label.toggled.connect(partial(self.label_event, obj))
        self.vertical_layout_main.addWidget(label)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52306241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档