python - 单击时更改 QPushButton 文本
问题描述
我正在编写一个简单的 GUI 程序,并且需要我的按钮在单击时更改文本。我就像在示例中一样对其进行了编码,但它不起作用。
示例代码:
class MyWidget(QtWidgets.QWidget):
def __init__(self):
QtWidgets.QWidget.__init__(self)
self.hello = ["Hallo Welt", "你好,世界", "Hei maailma",
"Hola Mundo", "Привет мир"]
self.button = QtWidgets.QPushButton("Click me!")
self.text = QtWidgets.QLabel("Hello World")
self.text.setAlignment(QtCore.Qt.AlignCenter)
self.layout = QtWidgets.QVBoxLayout()
self.layout.addWidget(self.text)
self.layout.addWidget(self.button)
self.setLayout(self.layout)
self.button.clicked.connect(self.magic)
def magic(self):
self.text.setText(random.choice(self.hello))
我的代码:
class Form(QWidget):
def __init__(self):
super(Form, self).__init__()
# Font
r_one = QFont("RussoOne-Regular", 40, QFont.Bold)
# Buttons
self.pvz_p_score = QPushButton('0')
self.pvz_z_score = QPushButton('0')
self.pvt_p_score = QPushButton('0')
self.pvt_t_score = QPushButton('0')
self.pvp_p1_score = QPushButton('0')
self.pvp_p2_score = QPushButton('0')
buttons = [self.pvz_p_score,
self.pvz_z_score,
self.pvt_p_score,
self.pvt_t_score,
self.pvp_p1_score,
self.pvp_p2_score]
for b in buttons:
b.setStyleSheet('QPushButton {background-color: #8ffe09;\
color: black;\
border: none}')
b.setFlat(True)
b.setIconSize(QSize(100,100))
b.setFont(r_one)
b.setContextMenuPolicy(Qt.CustomContextMenu)
b.clicked.connect(self.left_click)
b.customContextMenuRequested.connect(self.right_click)
...
def left_click(self):
self.text.setText(int(self.text)+1)
def right_click(self):
if int(self.text) > 0: button.text.setText(int(self.text)-1)
但是,在我的情况下self
对应于Form
,在示例中它链接到button
. 有任何想法吗?
解决方案
self.text
指的是一个 QLabel 小部件。因此,它不能转换为整数进行比较。- QLabel
text()
及其方法setText()
使用字符串,而不是整数。要设置文本,您可以将数字转换为字符串,或使用setNum()
接受整数和浮点值(但没有num()
函数)。
def left_click(self):
self.text.setText(str(int(self.text.text()) + 1))
# alternatively:
# self.text.setNum(int(self.text.text()) + 1)
def right_click(self):
if int(self.text.text()) > 0:
button.text.setText(str(int(self.text.text()) - 1))
# alternatively:
# button.text.setNum(int(self.text.text()) - 1)
请注意,我假设存在文本并且可以将其转换为整数。
推荐阅读
- json - spark无法推断java上的时间戳
- cassandra - Cassandra,自定义类型 - 以后可以扩展自定义类型吗?
- swift - Swift - 如何编写通用的 max 函数
- prometheus - Promql:是否可以在 Query_Range 中获得总数
- neo4j - Neo4j OGM 过滤器查询数组
- javascript - onChange 的标准返回参数应该是什么?
- c++ - 如何显示常量字符指针的地址
- sql - 选择嵌套 JSON 数组包含特定值的行
- javascript - Angular:如果单击按钮,防止输入字段模糊
- android - 当应用程序处于后台时,FCM 数据消息未导航到所需的片段