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