Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyQt5:获取对象中所有属性的列表(QPushButton)_Python_Qt_Properties_Pyqt_Pyqt5 - Fatal编程技术网

Python PyQt5:获取对象中所有属性的列表(QPushButton)

Python PyQt5:获取对象中所有属性的列表(QPushButton),python,qt,properties,pyqt,pyqt5,Python,Qt,Properties,Pyqt,Pyqt5,使用.setProperty,我为QPushButton分配了一些属性,如果我没有弄错的话,动态属性。我希望能够获得该按钮的所有属性的列表,理想情况下,我只希望添加“按钮”和“测试”属性。我尝试了'QObject.dynamicPropertyNames',但它给了我一个我不理解的输出,我也不确定它是否是我想要的 import sys from PyQt5 import QtCore, QtWidgets from PyQt5.QtWidgets import * from PyQt5.QtCo

使用.setProperty,我为QPushButton分配了一些属性,如果我没有弄错的话,动态属性。我希望能够获得该按钮的所有属性的列表,理想情况下,我只希望添加“按钮”和“测试”属性。我尝试了'QObject.dynamicPropertyNames',但它给了我一个我不理解的输出,我也不确定它是否是我想要的

import sys
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *


class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.setMinimumSize(QSize(400, 400))    
        texts= ['button1']
        self.pybutton = {}

        list_props = QPushButton('list_props', self)
        list_props.clicked.connect(self.list_props)
        list_props.resize(100,115)


        for x, (text, t) in enumerate(zip(texts, range(300,0,-100))):
            btn = QPushButton(text, self) 
            btn.setObjectName('btn{}'.format(x+1))
            btn.resize(100,100)
            btn.move(t,100)
            btn.setStyleSheet('QPushButton::menu-indicator { image: none; }')

            menu = QMenu()
            btn.setMenu(menu)
            args = ("button", btn)
            args2 = ("test", btn)
            menu.setProperty(*args)
            for act in ("item1", "item2", "item3"):
                action = menu.addAction('item1',self.status)
                action.setProperty(*args)
                action.setProperty(*args2)
            menu2 = menu.addMenu('menu2')
            action = menu2.addAction('item4', self.status)
            action.setProperty(*args)
            action.setProperty(*args2)
            self.pybutton[str(x+1)] = btn

        self.statusBar()

    def status(self):
        action = self.sender()
        btn = action.property("button")
        self.statusBar().showMessage('{} was pressed with button: {}'.format(action.text(), btn.text()))


    def list_props(self):
        for i in self.pybutton:
            x = self.pybutton[str(i)]
            print(x.objectName(),x.text())
            p = QObject.dynamicPropertyNames(x)
            print(p)

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    mainWin = MainWindow()
    mainWin.show()
    sys.exit( app.exec_() )
输出:

<PyQt5.QtWidgets.QAction object at 0x7f251731aca8>: 
    b'button':<PyQt5.QtWidgets.QPushButton object at 0x7f251731a948>
    b'test':<PyQt5.QtWidgets.QPushButton object at 0x7f251731a948>
<PyQt5.QtWidgets.QPushButton object at 0x7f251731a948>: 
    b'_q_styleSheetWidgetFont':<PyQt5.QtGui.QFont object at 0x7f25172975f8>
<PyQt5.QtWidgets.QAction object at 0x7f251731aa68>: 
    b'button':<PyQt5.QtWidgets.QPushButton object at 0x7f251731a948>
    b'test':<PyQt5.QtWidgets.QPushButton object at 0x7f251731a948>
<PyQt5.QtWidgets.QAction object at 0x7f251731aaf8>: 
    b'button':<PyQt5.QtWidgets.QPushButton object at 0x7f251731a948>
    b'test':<PyQt5.QtWidgets.QPushButton object at 0x7f251731a948>
<PyQt5.QtWidgets.QAction object at 0x7f251731ab88>: 
    b'button':<PyQt5.QtWidgets.QPushButton object at 0x7f251731a948>
    b'test':<PyQt5.QtWidgets.QPushButton object at 0x7f251731a948>
<PyQt5.QtWidgets.QAction object at 0x7f251731aca8>: 
    b'button':<PyQt5.QtWidgets.QPushButton object at 0x7f251731a948>
    b'test':<PyQt5.QtWidgets.QPushButton object at 0x7f251731a948>

如果您清楚地检查代码,您将看到除了样式表之外,您还没有为QPushButton建立任何动态属性

我将改进您的代码,每次打印时,您都将获得小部件的动态属性(如果有)

def list_props(self):
    for topLevel in QApplication.topLevelWidgets():
        for children in topLevel.findChildren(QObject):
            dproperties_names = children.dynamicPropertyNames()
            if dproperties_names:
                print("{}: ".format(children))
                for property_name in dproperties_names:
                    print("\t{}:{}".format(property_name, children.property(property_name)))
输出:

<PyQt5.QtWidgets.QAction object at 0x7f251731aca8>: 
    b'button':<PyQt5.QtWidgets.QPushButton object at 0x7f251731a948>
    b'test':<PyQt5.QtWidgets.QPushButton object at 0x7f251731a948>
<PyQt5.QtWidgets.QPushButton object at 0x7f251731a948>: 
    b'_q_styleSheetWidgetFont':<PyQt5.QtGui.QFont object at 0x7f25172975f8>
<PyQt5.QtWidgets.QAction object at 0x7f251731aa68>: 
    b'button':<PyQt5.QtWidgets.QPushButton object at 0x7f251731a948>
    b'test':<PyQt5.QtWidgets.QPushButton object at 0x7f251731a948>
<PyQt5.QtWidgets.QAction object at 0x7f251731aaf8>: 
    b'button':<PyQt5.QtWidgets.QPushButton object at 0x7f251731a948>
    b'test':<PyQt5.QtWidgets.QPushButton object at 0x7f251731a948>
<PyQt5.QtWidgets.QAction object at 0x7f251731ab88>: 
    b'button':<PyQt5.QtWidgets.QPushButton object at 0x7f251731a948>
    b'test':<PyQt5.QtWidgets.QPushButton object at 0x7f251731a948>
<PyQt5.QtWidgets.QAction object at 0x7f251731aca8>: 
    b'button':<PyQt5.QtWidgets.QPushButton object at 0x7f251731a948>
    b'test':<PyQt5.QtWidgets.QPushButton object at 0x7f251731a948>
<PyQt5.QtWidgets.QAction object at 0x7f251731aca8>: 
    b'button':<PyQt5.QtWidgets.QPushButton object at 0x7f251731a948>
    b'test':<PyQt5.QtWidgets.QPushButton object at 0x7f251731a948>
<PyQt5.QtWidgets.QPushButton object at 0x7f251731a948>: 
    b'_q_styleSheetWidgetFont':<PyQt5.QtGui.QFont object at 0x7f25172975f8>
<PyQt5.QtWidgets.QAction object at 0x7f251731aa68>: 
    b'button':<PyQt5.QtWidgets.QPushButton object at 0x7f251731a948>
    b'test':<PyQt5.QtWidgets.QPushButton object at 0x7f251731a948>
<PyQt5.QtWidgets.QAction object at 0x7f251731aaf8>: 
    b'button':<PyQt5.QtWidgets.QPushButton object at 0x7f251731a948>
    b'test':<PyQt5.QtWidgets.QPushButton object at 0x7f251731a948>
<PyQt5.QtWidgets.QAction object at 0x7f251731ab88>: 
    b'button':<PyQt5.QtWidgets.QPushButton object at 0x7f251731a948>
    b'test':<PyQt5.QtWidgets.QPushButton object at 0x7f251731a948>
<PyQt5.QtWidgets.QAction object at 0x7f251731aca8>: 
    b'button':<PyQt5.QtWidgets.QPushButton object at 0x7f251731a948>
    b'test':<PyQt5.QtWidgets.QPushButton object at 0x7f251731a948>