【发布时间】:2019-06-14 18:17:13
【问题描述】:
我目前正在从在我的 Python 脚本中使用 Tk 切换到 PyQt 以运行一些简单的 GUI。它们旨在提供稍后将保存在文件中的功能以及将在启动不同脚本后收集的一些数据(我暂时省略的单独的 PushButton)。现在,我无法理解如何根据用户的输入更改某些按钮的文本。更准确地说,我想显示相同的按钮,但是使用 BTNS = ["1", "2", ... "8"] 或 BTNS = ["9", "10", ... "16 "],取决于不同按钮的输入(“右”与“左”)。我尝试了不同的方法(从组内的 findChildren 获取信息、使用 deleteLater、使用 clicked 参数等),但没有给出我想要的结果。
这是我的问题的 MWE。
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QFont
class App(QMainWindow):
def __init__(self):
super().__init__()
self.setGeometry(50, 50, 600, 500)
self.initUI()
def initUI(self):
self.MainLayout = QVBoxLayout(self)
self.lbl1 = QLabel(self)
self.lbl1.setText('Test1:')
self.lbl1.move(50, 80)
self.MainLayout.addWidget(self.lbl1)
self.MainLayout.addWidget(self.addSideButtons())
self.btnGroup2 = QButtonGroup(self)
self.MainLayout.addWidget(self.StimButtons("left"))
self.show()
def addSideButtons(self):
self.btnGroup1 = QButtonGroup()
self.button1 = QPushButton(self)
self.button2 = QPushButton(self)
self.button1.setGeometry(90, 20, 100, 30)
self.button1.setText("Left")
self.button1.setCheckable(True)
#self.button1.clicked.connect(lambda:self.StimButtons("left"))
self.button1.setChecked(True)
self.btnGroup1.addButton(self.button1)
self.button2.setGeometry(200, 20, 100, 30)
self.button2.setText("Right")
self.button2.setCheckable(True)
#self.button2.clicked.connect(lambda:self.StimButtons("right"))
self.btnGroup1.addButton(self.button2)
self.btnGroup1.setExclusive(True)
def StimButtons(self, btn):
if btn == "left":
BTNS = ["1", "2", "3", "4", "5", "6", "7", "8"]
else:
BTNS = ["9", "10", "11", "12", "13", "14", "15", "16"]
coords = [(150, 350), (80, 300), (150, 300), (220, 300),
(80, 250), (150, 250), (220, 250), (150, 200)]
for idx, contact_bts in enumerate(BTNS):
self.btn = QPushButton(contact_bts, self)
self.btn.setGeometry(coords[idx][0], coords[idx][1], 60, 45)
self.btn.setCheckable(True)
self.btnGroup2.addButton(self.btn)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = App()
sys.exit(app.exec_())
【问题讨论】: