gpt4 book ai didi

python - 在用户输入后,如何更改 QButtongroup 元素中 QPushbutton 中的文本?

转载 作者:行者123 更新时间:2023-12-01 07:43:02 26 4
gpt4 key购买 nike

我目前正在从在 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_())

最佳答案

您必须重用按钮,而不是删除它们并创建它们,因此您首先在仅调用一次的方法中创建按钮。在另一种方法中,您必须根据按下的按钮更改按钮的文本,为此,您必须发送一个标识按钮的功能,在这种情况下,按下的按钮将使用 QButtonGroup 的 buttonClicked 信号发送。另一方面,作为一个优点,我重组了您的代码以使用布局。

# -*- coding: utf-8 -*-

from PyQt5 import QtCore, QtGui, QtWidgets


class App(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.setGeometry(50, 50, 600, 500)
self.initUI()

def initUI(self):
self.m_buttons = []

group = QtWidgets.QButtonGroup(self)
left_button = QtWidgets.QPushButton("Left", checkable=True)
right_button = QtWidgets.QPushButton("Right", checkable=True)
group.addButton(left_button)
group.addButton(right_button)
group.buttonClicked[QtWidgets.QAbstractButton].connect(self.update_text)

label = QtWidgets.QLabel("Test1:")

self.m_widget = QtWidgets.QWidget()
self.create_buttons()

left_button.click()

central_widget = QtWidgets.QWidget()
self.setCentralWidget(central_widget)
lay = QtWidgets.QVBoxLayout(central_widget)
hlay = QtWidgets.QHBoxLayout()
hlay.addStretch()
hlay.addWidget(left_button)
hlay.addWidget(right_button)
hlay.addStretch()
lay.addLayout(hlay)
lay.addWidget(label)
lay.addWidget(self.m_widget, alignment=QtCore.Qt.AlignCenter)
lay.addStretch()

def create_buttons(self):
coords = [
(4, 1),
(3, 0),
(3, 1),
(3, 2),
(2, 0),
(2, 1),
(2, 2),
(0, 1),
]
group = QtWidgets.QButtonGroup(exclusive=True)
grid = QtWidgets.QGridLayout(self.m_widget)
for coord in coords:
btn = QtWidgets.QPushButton(checkable=True)
btn.setFixedSize(60, 45)
grid.addWidget(btn, *coord)
group.addButton(btn)
self.m_buttons.append(btn)
self.m_widget.setFixedSize(self.m_widget.sizeHint())

@QtCore.pyqtSlot(QtWidgets.QAbstractButton)
def update_text(self, btn):
text = btn.text()
texts = {
"Left": ["1", "2", "3", "4", "5", "6", "7", "8"],
"Right": ["9", "10", "11", "12", "13", "14", "15", "16"],
}
if text in texts:
for btn, txt in zip(self.m_buttons, texts[text]):
btn.setText(txt)


if __name__ == "__main__":
import sys

app = QtWidgets.QApplication(sys.argv)

w = App()
w.show()

sys.exit(app.exec_())

enter image description here

enter image description here

关于python - 在用户输入后,如何更改 QButtongroup 元素中 QPushbutton 中的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56595425/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com