function - PyQt5 多个按钮和 1 个函数来更改按钮文本
问题描述
我有一个带有多个按钮的应用程序按下按钮时,必须更改按下按钮上的文本。这可以通过每个按钮的单独函数来完成,但我想使用 1 个函数来保持代码简短。
到目前为止的代码:
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow
import sys
class MyWindow(QMainWindow):
def __init__(self):
super(MyWindow, self).__init__()
self.setGeometry(200, 200, 700, 500)
self.setWindowTitle("Tic Tac Toe")
self.initUI()
def initUI(self):
font = QtGui.QFont()
font.setPointSize(50)
font.setBold(True)
font.setWeight(75)
self.btn1 = QtWidgets.QPushButton(self)
self.btn1.setGeometry(QtCore.QRect(90, 50, 93, 91))
self.btn1.setFont(font)
self.btn1.setObjectName("btn1")
self.btn1.clicked.connect(lambda:self.function("btn1"))
self.btn2 = QtWidgets.QPushButton(self)
self.btn2.setGeometry(QtCore.QRect(210, 50, 93, 91))
self.btn2.setFont(font)
self.btn2.setText("")
self.btn2.setObjectName("btn2")
self.btn2.clicked.connect(lambda:self.function("btn2"))
font2 = QtGui.QFont()
font2.setPointSize(16)
self.label = QtWidgets.QLabel(self)
self.label.setGeometry(QtCore.QRect(470, 50, 201, 51))
self.label.setFont(font2)
self.label.setObjectName("label")
def function(self, btnnmbr):
self.label.setText("knop " + btnnmbr)
#self.btn1.setText("X")
# Mainloop
def window():
app = QApplication(sys.argv)
win = MyWindow()
win.show()
sys.exit(app.exec_())
window()
知道如何更改单击的按钮实例的文本吗?
解决方案
尝试一下:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow
class MyWindow(QMainWindow):
def __init__(self):
super(MyWindow, self).__init__()
self.setGeometry(200, 200, 700, 500)
self.setWindowTitle("Tic Tac Toe")
self.initUI()
def initUI(self):
font = QtGui.QFont()
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.btn1 = QtWidgets.QPushButton(self)
self.btn1.setGeometry(QtCore.QRect(90, 50, 93, 91))
self.btn1.setFont(font)
self.btn1.setObjectName("btn1")
self.btn1.clicked.connect(lambda ch, btn=self.btn1: self.function(btn)) # +
self.btn2 = QtWidgets.QPushButton(self)
self.btn2.setGeometry(QtCore.QRect(210, 50, 93, 91))
self.btn2.setFont(font)
self.btn2.setText("")
self.btn2.setObjectName("btn2")
self.btn2.clicked.connect(lambda ch, btn=self.btn2: self.function(btn)) # +
font2 = QtGui.QFont()
font2.setPointSize(16)
self.label = QtWidgets.QLabel(self)
self.label.setGeometry(QtCore.QRect(470, 50, 201, 51))
self.label.setFont(font2)
self.label.setObjectName("label")
def function(self, btn): # + btn
self.label.setText(f"knop {btn.objectName()}") # +
btn.setText(btn.objectName()) # +++
#self.btn1.setText("X")
if __name__ == '__main__':
app = QApplication(sys.argv)
win = MyWindow()
win.show()
sys.exit(app.exec_())
推荐阅读
- java - Java:我们如何进一步简化文件的 java 8 流逻辑
- python - 如何使用databricks集群运行气流PythonOperator?
- webrtc - WebRTC:使用 coturn 强制 iceTransportType 中继
- react-native - React Native 中的服务器端渲染
- c# - 在什么时候使用 System.Runtime.Caching 处理对象
- reactjs - React 中使用 `useState` 来管理表单是否已提交是否正常?
- cucumber - Cucumber 中的替代参数类型
- pdf - .NET Core pdf 下载器“找不到内容类型‘应用程序/pdf’的输出格式化程序...”
- python - 使用两个不同的数据框读取两个 SQL 并比较两个结果数据集
- types - 什么是正确的数据类型才能使 Rust 中的迭代器之间复制的函数尽可能多才多艺?