2017-02-12 15 views
0

私は、各ボタンがそれ自身のグループボックス内にあるボタンのグリッドを持っています。私はこれらのボタンのラベルを動的に更新したい。オブジェクト名でPyQt5 setText?

反復で作成された後にこれらのボタンに対処する方法はわかりませんが、オブジェクト名に対処する方法があります。

私が読んだドキュメントには、オブジェクト名によるsettextのメソッドは含まれていません。これは可能ですか、これを行うにはより良い方法がありますか?

PyQt5、Pythonのあなたは機能をウィジェットに名前を入れている場合は3.6

+0

[QButtonGroup](https://doc.qt.io/qt-5/qbuttongroup.html)。 – ekhumoro

+0

@ekhumoro。あなたが何を示唆しているのか分かりません。各ボタンの上にタイトなラベルを追加する方法として、各ボタンはQGroupBox内にあります。また、イベントに応じて個々のボックスの背景色を変更したいと思っています(ボタンの色を変更することなく、別のイベントのインジケータとしても行いたい)。実際のボタンウィジェットと同じ方法でQGroupBoxに整数IDを割り当てることはできますか?現在はQGridLayoutに追加されています。 – chmedly

+0

各ボタンはグループボックスを親として持つので、 'button.parent()'でアクセスすることができます。ボタングループは、ボタンのセット(IDを使用)にアクセスし、単一の接続を介してすべての信号を処理する統合された方法を提供します。これは単なる便利なクラスで、ボタンを自分で管理する必要がありません。 (PS:Qt Designerを使用してボタングループを設定することもできます)(http://stackoverflow.com/a/41861892/984421))。 – ekhumoro

答えて

0

{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_())