最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

QPushButton按鈕

2023-03-22 07:12 作者:千牛不是牛  | 我要投稿

QPushButton按鈕

QPushButton 是 PyQt6 里的按鈕控件,這篇教學會介紹如何在 PyQt6 窗口里加入 QPushButton 按鈕,并進行一些基本的樣式設定,以及設定點擊按鈕后的行為事件。

快速預覽:

  • 加入 QPushButton 按鈕]

  • QPushButton 位置設定

  • QPushButton 樣式設定

  • 停用 QPushButton

  • QPushButton 點擊事件


加入 QPushButton 按鈕

建立 PyQt6 窗口物件后,透過 QtWidgets.QPushButton(widget) 方法,就能在指定的控件中建立按鈕,下方的程式碼執(zhí)行后,會加入一個 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())

image-20230321100718315

QPushButton 位置設定

透過下列 QPushButton 方法,可以將 QPushButton 控件定位到指定的位置:

方法參數(shù)說明move()x, y設定 QPushButton 在擺放的父控件中的 xy 座標,x 往右為正,y 往下為正,尺寸根據(jù)內(nèi)容自動延伸。setGeometry()x, y, w, h設定 QPushButton 在擺放的父控件中的 xy 座標和長寬尺寸,x 往右為正,y 往下為正,如果超過長寬尺寸,預設會被裁切無法顯示。

下方的程式碼執(zhí)行后會放入兩個 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())

image-20230321100809931

QPushButton 樣式設定

如果會使用網(wǎng)頁 CSS 語法,就能透過 setStyleSheet() 設定 QPushButton 樣式,在設計樣式上也較為彈性好用,下方的程式碼執(zhí)行后,會套用 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())

image-20230321100901686

調(diào)整 setStyleSheet() 內(nèi)容,也能做出類似網(wǎng)頁按鈕 hover 的樣式效果,下方的程式碼執(zhí)行后,當滑鼠移動到按鈕上方,按鈕就會變色。

?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 會以「半透明」的方式呈現(xiàn)。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())

image-20230321102237330

如果是使用 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())

image-20230321102320845

QPushButton 點擊事件

使用 clicked.connect(fn) 方法可以設定 QPushButton 的點擊事件,該方法表示「點擊按鈕時,會執(zhí)行 fn 函式」,下方的程式碼執(zhí)行后,點擊按鈕會執(zhí)行 show 函式,show 函式會不斷地將變數(shù) a 增加 1,再透過 QLabel 顯示數(shù)字。

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 內(nèi)容

label = QtWidgets.QLabel(Form)
label.setText('0')
label.setStyleSheet('font-size:20px;')
label.setGeometry(50,30,100,30)

btn = QtWidgets.QPushButton(Form)
btn.setText('增加數(shù)字')
btn.setGeometry(50,60,100,30)
btn.clicked.connect(show) ? ? ? # 點擊時執(zhí)行 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('增加數(shù)字')
? ? ? ?self.btn.setGeometry(50,60,100,30)
? ? ? ?self.btn.clicked.connect(self.showNum) ?# 點擊時執(zhí)行 showNum 方法

? ?# 注意不能使用 show 作為 class 內(nèi)部方法的名稱
? ?def showNum(self):
? ? ? ?self.a = self.a + 1
? ? ? ?self.label.setText(str(self.a)) ? # 更新 QLabel 內(nèi)容

if __name__ == '__main__':
? ?app = QtWidgets.QApplication(sys.argv)
? ?Form = MyWidget()
? ?Form.show()
? ?sys.exit(app.exec())

動畫1

如果要執(zhí)行的函式帶有「參數(shù)」,則可以使用 lambda 匿名函式處理,下方的程式碼執(zhí)行后,點擊 A 按鈕就會出現(xiàn) A 文字,點擊 B 按鈕就會出現(xiàn) B 文字。

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) ? # 顯示參數(shù)內(nèi)容

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 方法造成無法顯示 ):

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 內(nèi)部方法的名稱
? ?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按鈕的評論 (共 條)

分享到微博請遵守國家法律
华蓥市| 邵东县| 景东| 灵川县| 河源市| 东方市| 大连市| 辽中县| 衡山县| 准格尔旗| 象州县| 平原县| 台山市| 佳木斯市| 浪卡子县| 社旗县| 侯马市| 桃园县| 民丰县| 休宁县| 安平县| 东乌珠穆沁旗| 平遥县| 西宁市| 新昌县| 平昌县| 平陆县| 墨竹工卡县| 杭锦旗| 海林市| 库车县| 东宁县| 大化| 磐安县| 呼伦贝尔市| 大丰市| 垦利县| 神农架林区| 都兰县| 伽师县| 峨山|