2017-02-12 4 views
0

У меня есть сетка кнопок с каждой кнопкой, находящейся внутри собственного группового ящика. Я хочу динамически обновлять эти ярлыки кнопок.PyQt5 setText по названию объекта?

Непонятно, как обращаться с этими кнопками после создания на итерации и есть способ просто адресовать их имена объектов.

В документации, которую я прочитал, как представляется, не содержится никаких методов для settext через имя объекта. Возможно ли это или есть лучший способ сделать это?

PyQt5, Python 3.6

+0

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

+0

@ekhumoro. Я не уверен, что вы предлагаете. Каждая из моих кнопок находится внутри QGroupBox, чтобы добавить яркую надпись над каждой кнопкой. Я также надеюсь изменить цвет фона отдельных ящиков в ответ на события (без изменения цвета самой кнопки, поскольку я также хочу сделать это как индикатор для разных событий). Могу ли я назначить целочисленный идентификатор для QGroupBoxes так же, как и для реальных кнопок? В настоящее время они добавляются в QGridLayout. – chmedly

+0

Каждая кнопка будет иметь свой групповой ящик как родительский, поэтому вы можете получить к нему доступ с помощью кнопки 'button.parent()'. Группа кнопок предоставляет унифицированный способ доступа к набору кнопок (с использованием идентификаторов) и обработки всех их сигналов через одно соединение. Это простой класс удобства, который позволяет вам управлять кнопками самостоятельно. (PS: вы также можете [использовать Qt Designer для настройки групп кнопок] (http://stackoverflow.com/a/41861892/984421)). – ekhumoro

ответ

0

Если вы поставили имя виджета с помощью функции:

{your widget}.setObjectName({your name}) 

Вы можете получить к нему доступ через родителей через findChild функции:

{your parent widget}.findChild({name class}, {your name}) 

Пример:

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_()) 
Смежные вопросы