QPushButton按钮
QPushButton 是 PyQt6 里的按钮控件,这篇教学会介绍如何在 PyQt6 窗口里加入 QPushButton 按钮,并进行一些基本的样式设定,以及设定点击按钮后的行为事件。
快速预览:
加入 QPushButton 按钮]
QPushButton 位置设定
QPushButton 样式设定
停用 QPushButton
QPushButton 点击事件
加入 QPushButton 按钮
建立 PyQt6 窗口物件后,透过 QtWidgets.QPushButton(widget)
方法,就能在指定的控件中建立按钮,下方的程式码执行后,会加入一个 QPushButton 按钮 ,并使用 setText() 方法加入文字。
from PyQt6 import QtWidgets import sys app = QtWidgets.QApplication(sys.argv) Form = QtWidgets.QWidget() Form.setWindowTitle('千牛编程思维') Form.resize(320, 240) btn = QtWidgets.QPushButton(Form) # 在 Form 中加入一个 QPushButton btn.setText('我是按钮') # 按钮文字 Form.show() sys.exit(app.exec())
class 写法
from PyQt6 import QtWidgets import sys class MyWidget(QtWidgets.QWidget): def __init__(self): super().__init__() self.setWindowTitle('千牛编程思维') self.resize(320, 240) self.ui() def ui(self): self.btn = QtWidgets.QPushButton(self) # 在 Form 中加入一个 QPushButton self.btn.setText('我是按钮') # 按钮文字 if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) Form = MyWidget() Form.show() sys.exit(app.exec())
QPushButton 位置设定
透过下列 QPushButton 方法,可以将 QPushButton 控件定位到指定的位置:
方法 | 参数 | 说明 |
---|---|---|
move() | x, y | 设定 QPushButton 在摆放的父控件中的 xy 座标,x 往右为正,y 往下为正,尺寸根据内容自动延伸。 |
setGeometry() | x, y, w, h | 设定 QPushButton 在摆放的父控件中的 xy 座标和长宽尺寸,x 往右为正,y 往下为正,如果超过长宽尺寸,预设会被裁切无法显示。 |
下方的程式码执行后会放入两个 QPushButton,一个使用 move() 定位在 (50,30) 位置,另外一个使用 setGeometry() 方法定位在 (50,60) 的位置并设定大小为 100x50。
from PyQt6 import QtWidgets import sys app = QtWidgets.QApplication(sys.argv) Form = QtWidgets.QWidget() Form.setWindowTitle('千牛编程思维') Form.resize(320, 240) btn1 = QtWidgets.QPushButton(Form) btn1.setText('按钮 1') btn1.move(50,30) # 移动到 (50,30) btn2 = QtWidgets.QPushButton(Form) btn2.setText('按钮 2') btn2.setGeometry(50,60,100,50) # 移动到 (50,60),大小 100x50 Form.show() sys.exit(app.exec())
class 写法
from PyQt6 import QtWidgets import sys class MyWidget(QtWidgets.QWidget): def __init__(self): super().__init__() self.setWindowTitle('千牛编程思维') self.resize(320, 240) self.ui() def ui(self): self.btn1 = QtWidgets.QPushButton(self) self.btn1.setText('按钮 1') self.btn1.move(50,30) # 移动到 (50,30) self.btn2 = QtWidgets.QPushButton(self) self.btn2.setText('按钮 2') self.btn2.setGeometry(50,60,100,50) # 移动到 (50,60),大小 100x50 if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) Form = MyWidget() Form.show() sys.exit(app.exec())
QPushButton 样式设定
如果会使用网页 CSS 语法,就能透过 setStyleSheet() 设定 QPushButton 样式,在设计样式上也较为弹性好用,下方的程式码执行后,会套用 CSS 样式语法,将 QPushButton 变成黄底红字黑色外框的样式 ( 不支援 CSS3 相关语法 )。
from PyQt6 import QtWidgets import sys app = QtWidgets.QApplication(sys.argv) Form = QtWidgets.QWidget() Form.setWindowTitle('千牛编程思维') Form.resize(320, 240) btn = QtWidgets.QPushButton(Form) btn.setText('按钮') btn.setGeometry(50,50,100,50) btn.setStyleSheet(''' background:#ff0; color:#f00; font-size:20px; border:2px solid #000; ''') Form.show() sys.exit(app.exec())
class 写法:
from PyQt6 import QtWidgets import sys class MyWidget(QtWidgets.QWidget): def __init__(self): super().__init__() self.setWindowTitle('千牛编程思维') self.resize(320, 240) self.ui() def ui(self): self.btn = QtWidgets.QPushButton(self) self.btn.setText('按钮') self.btn.setGeometry(50,50,100,50) self.btn.setStyleSheet(''' background:#ff0; color:#f00; font-size:20px; border:2px solid #000; ''') if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) Form = MyWidget() Form.show() sys.exit(app.exec())
调整 setStyleSheet() 内容,也能做出类似网页按钮 hover 的样式效果,下方的程式码执行后,当滑鼠移动到按钮上方,按钮就会变色。
from PyQt6 import QtWidgets import sys app = QtWidgets.QApplication(sys.argv) Form = QtWidgets.QWidget() Form.setWindowTitle('千牛编程思维') Form.resize(320, 240) btn = QtWidgets.QPushButton(Form) btn.setText('按钮') btn.setGeometry(50,50,100,50) btn.setStyleSheet(''' QPushButton { font-size:20px; color: #f00; background: #ff0; border: 2px solid #000; } QPushButton:hover { color: #ff0; background: #f00; } ''') Form.show() sys.exit(app.exec())
class 写法:
from PyQt6 import QtWidgets import sys class MyWidget(QtWidgets.QWidget): def __init__(self): super().__init__() self.setWindowTitle('千牛编程思维') self.resize(320, 240) self.ui() def ui(self): self.btn = QtWidgets.QPushButton(self) self.btn.setText('按钮') self.btn.setGeometry(50,50,100,50) self.btn.setStyleSheet(''' QPushButton { font-size:20px; color: #f00; background: #ff0; border: 2px solid #000; } QPushButton:hover { color: #ff0; background: #f00; } ''') if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) Form = MyWidget() Form.show() sys.exit(app.exec())
停用 QPushButton
使用 方法可以「停用」或「启用」QPushButton,停用的 QPushButton 会以「半透明」的方式呈现。setDisabled()
from PyQt6 import QtWidgets import sys app = QtWidgets.QApplication(sys.argv) Form = QtWidgets.QWidget() Form.setWindowTitle('千牛编程思维') Form.resize(320, 240) btn = QtWidgets.QPushButton(Form) btn.setText('按钮') btn.setGeometry(50,50,100,50) btn.setDisabled(True) # 停用设为 True Form.show() sys.exit(app.exec())
class 写法:
from PyQt6 import QtWidgets import sys class MyWidget(QtWidgets.QWidget): def __init__(self): super().__init__() self.setWindowTitle('千牛编程思维') self.resize(320, 240) self.ui() def ui(self): self.btn = QtWidgets.QPushButton(self) self.btn.setText('按钮') self.btn.setGeometry(50,50,100,50) self.btn.setDisabled(True) if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) Form = MyWidget() Form.show() sys.exit(app.exec())
如果是使用 setStyleSheet() 方法设定样式,可以从 QPushButton:disabled
的属性设定停用按钮样式。
from PyQt6 import QtWidgets import sys app = QtWidgets.QApplication(sys.argv) Form = QtWidgets.QWidget() Form.setWindowTitle('千牛编程思维') Form.resize(320, 240) btn = QtWidgets.QPushButton(Form) btn.setText('按钮') btn.setGeometry(50,50,100,50) btn.setStyleSheet(''' QPushButton { font-size:20px; color: #f00; background: #ff0; border: 2px solid #000; } QPushButton:disabled { color:#fff; background:#ccc; border: 2px solid #aaa; } ''') btn.setDisabled(True) Form.show() sys.exit(app.exec())
class 写法:
from PyQt6 import QtWidgets import sys class MyWidget(QtWidgets.QWidget): def __init__(self): super().__init__() self.setWindowTitle('千牛编程思维') self.resize(320, 240) self.ui() def ui(self): self.btn = QtWidgets.QPushButton(self) self.btn.setText('按钮') self.btn.setGeometry(50,50,100,50) self.btn.setStyleSheet(''' QPushButton { font-size:20px; color: #f00; background: #ff0; border: 2px solid #000; } QPushButton:disabled { color:#fff; background:#ccc; border: 2px solid #aaa; } ''') self.btn.setDisabled(True) if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) Form = MyWidget() Form.show() sys.exit(app.exec())
QPushButton 点击事件
使用 clicked.connect(fn)
方法可以设定 QPushButton 的点击事件,该方法表示「点击按钮时,会执行 fn 函式」,下方的程式码执行后,点击按钮会执行 show 函式,show 函式会不断地将变数 a 增加 1,再透过 QLabel 显示数字。
from PyQt6 import QtWidgets import sys app = QtWidgets.QApplication(sys.argv) Form = QtWidgets.QWidget() Form.setWindowTitle('千牛编程思维') Form.resize(320, 240) a = 0 def show(): global a a = a + 1 label.setText(str(a)) # 更新 QLabel 内容 label = QtWidgets.QLabel(Form) label.setText('0') label.setStyleSheet('font-size:20px;') label.setGeometry(50,30,100,30) btn = QtWidgets.QPushButton(Form) btn.setText('增加数字') btn.setGeometry(50,60,100,30) btn.clicked.connect(show) # 点击时执行 show 函式 Form.show() sys.exit(app.exec())
class 写法 ( 注意不能使用 show 作为方法名称,会覆写基类的 show 方法造成无法显示 ):
from PyQt6 import QtWidgets import sys class MyWidget(QtWidgets.QWidget): def __init__(self): super().__init__() self.setWindowTitle('千牛编程思维') self.resize(320, 240) self.a = 0 # 设定 a 属性为 0 self.ui() def ui(self): self.label = QtWidgets.QLabel(self) self.label.setText('0') self.label.setStyleSheet('font-size:20px;') self.label.setGeometry(50,30,100,30) self.btn = QtWidgets.QPushButton(self) self.btn.setText('增加数字') self.btn.setGeometry(50,60,100,30) self.btn.clicked.connect(self.showNum) # 点击时执行 showNum 方法 # 注意不能使用 show 作为 class 内部方法的名称 def showNum(self): self.a = self.a + 1 self.label.setText(str(self.a)) # 更新 QLabel 内容 if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) Form = MyWidget() Form.show() sys.exit(app.exec())
如果要执行的函式带有「参数」,则可以使用 lambda 匿名函式处理,下方的程式码执行后,点击 A 按钮就会出现 A 文字,点击 B 按钮就会出现 B 文字。文章来源:https://www.toymoban.com/news/detail-741274.html
from PyQt6 import QtWidgets import sys app = QtWidgets.QApplication(sys.argv) Form = QtWidgets.QWidget() Form.setWindowTitle('千牛编程思维') Form.resize(320, 240) def show(e): label.setText(e) # 显示参数内容 label = QtWidgets.QLabel(Form) label.setText('A') label.setStyleSheet('font-size:20px;') label.setGeometry(50,30,100,30) btn1 = QtWidgets.QPushButton(Form) btn1.setText('A') btn1.setGeometry(50,60,50,30) btn1.clicked.connect(lambda:show('A')) # 使用 lambda 函式 btn2 = QtWidgets.QPushButton(Form) btn2.setText('B') btn2.setGeometry(110,60,50,30) btn2.clicked.connect(lambda:show('B')) # 使用 lambda 函式 Form.show() sys.exit(app.exec())
class 写法 ( 注意不能使用 show 作为方法名称,会覆写基类的 show 方法造成无法显示 ):文章来源地址https://www.toymoban.com/news/detail-741274.html
from PyQt6 import QtWidgets import sys class MyWidget(QtWidgets.QWidget): def __init__(self): super().__init__() self.setWindowTitle('千牛编程思维') self.resize(320, 240) self.ui() def ui(self): self.label = QtWidgets.QLabel(self) self.label.setText('A') self.label.setStyleSheet('font-size:20px;') self.label.setGeometry(50,30,100,30) self.btn1 = QtWidgets.QPushButton(self) self.btn1.setText('A') self.btn1.setGeometry(50,60,50,30) self.btn1.clicked.connect(lambda:self.showText('A')) # 使用 lambda 函式 self.btn2 = QtWidgets.QPushButton(self) self.btn2.setText('B') self.btn2.setGeometry(110,60,50,30) self.btn2.clicked.connect(lambda:self.showText('B')) # 使用 lambda 函式 # 注意不能使用 show 作为 class 内部方法的名称 def showText(self, text): self.label.setText(text) if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) Form = MyWidget() Form.show() sys.exit(app.exec())
到了这里,关于QPushButton按钮的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!