0
我有一個按鈕的網格,每個按鈕都位於它自己的groupbox內。我想動態更新這些按鈕的標籤。PyQt5 setText by object name?
我不清楚如何在迭代中創建這些按鈕後才能解決這些按鈕,並且有辦法解決它們的對象名稱。
我讀過的文檔似乎沒有包含任何通過對象名稱的settext方法。這是可能的還是有更好的方法來做到這一點?
PyQt5,Python的3.6
我有一個按鈕的網格,每個按鈕都位於它自己的groupbox內。我想動態更新這些按鈕的標籤。PyQt5 setText by object name?
我不清楚如何在迭代中創建這些按鈕後才能解決這些按鈕,並且有辦法解決它們的對象名稱。
我讀過的文檔似乎沒有包含任何通過對象名稱的settext方法。這是可能的還是有更好的方法來做到這一點?
PyQt5,Python的3.6
如果你已經把一個名字部件與功能:
{your parent widget}.findChild({name class}, {your name})
:
{your widget}.setObjectName({your name})
你可以通過findChild
功能通過父訪問
例如:
import sys
from PyQt5.QtCore import QTimer
from PyQt5.QtWidgets import QApplication, QPushButton, QVBoxLayout, QWidget
class Widget(QWidget):
def __init__(self, parent=None):
super(Widget, self).__init__(parent=parent)
self.verticalLayout = QVBoxLayout(self)
# self.verticalLayout.setObjectName("verticalLayout")
for i in range(10):
pushButton = QPushButton(self)
pushButton.setObjectName("pushButton{}".format(i))
pushButton.setText(str(i))
self.verticalLayout.addWidget(pushButton)
timer = QTimer(self)
timer.setInterval(1000)
timer.timeout.connect(self.updateText)
timer.start()
def updateText(self):
for i in range(10):
child = self.findChild(QPushButton, "pushButton{}".format(i))
counter = int(child.text())
child.setText(str(counter+1))
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())
[QButtonGroup](https://doc.qt.io/qt-5/qbuttongroup.html)。 – ekhumoro
@ekhumoro。我不確定你的建議。我的每個按鈕都位於QGroupBox內,作爲在每個按鈕上方添加嚴格標籤的方式。我也希望改變個別盒子的背景顏色以響應事件(不需要改變按鈕本身的顏色,因爲我也想將它作爲不同事件的指示器)。我可以給QGroupBoxes分配一個整數id,就像我真正的按鈕小部件一樣嗎?目前他們被添加到QGridLayout。 – chmedly
每個按鈕都有它的組框作爲父項,所以你可以用'button.parent()'來訪問它。按鈕組提供統一的方式來訪問一組按鈕(使用ID),並通過單個連接處理所有信號。這只是一個簡單的便利課程,無需您自己管理按鈕。 (PS:你也可以[使用Qt Designer設置按鈕組](http://stackoverflow.com/a/41861892/984421))。 – ekhumoro