PyQt5學習 (4)--QAbstractButton(下)

Charaine發表於2023-03-29

QAbstractBUtton:
  所有按鈕控制元件的基類
  提供按鈕的通用功能
  繼承自QWidget
  屬於抽象類別,不能直接去使用,必須藉助於子類(除非你覺得子類不夠用,想自定義一個按鈕)
  大部分功能之前已經使用過,在這裡只作簡單介紹


文字設定:
setText(str) :設定按鈕提示文字
text() : 獲取按鈕提示文字


圖示設定:

點選檢視程式碼
btn = QPushButton(window)
icon = QIcon("madeline.jpg")
size = QSize(50, 50)  # Qsize格式
btn.setIconSize(size)  # 設定圖示大小
btn.setIcon(icon)  # 設定圖示
print(btn.icon())  # 獲取圖示
print(btn.iconSize())  # 獲取圖示大小

快捷鍵設定
  透過指定的快捷鍵,觸發按鈕的點選

點選檢視程式碼
btn.setText("a&bc")  # 方法一:在快捷鍵字母前加“&”符號,在文字中不會顯示,使用方法:Alt+快捷鍵字母
btn.setShortcut("Alt+G")  # 方法二:這樣設定,不區分大小寫

自動重複
image

點選檢視程式碼
btn.setAutoRepeat(True)  # 設定是否自動重複
print(btn.autoRepeat())  # 檢測是否自動重複
btn.setAutoRepeatDelay(2000)  # 設定自動重複開始時間(ms)
btn.setAutoRepeatInterval(1000)  # 設定自動重複間隔(ms)
print(btn.autoRepeatDelay())  # 獲取開始自動重複時間
print(btn.autoRepeatInterval())  # 獲取自動重複時間間隔

狀態設定
image

點選檢視程式碼
push_btn = QPushButton(window)
push_btn.setText("這是按鈕")
push_btn.move(100, 100)
push_btn.setStyleSheet("QPushButton:pressed {background-color: red;}")
radio_btn = QRadioButton(window)
radio_btn.setText("Radio")
radio_btn.move(100, 150)
checkbox = QCheckBox(window)
checkbox.setText("Checkbox")
checkbox.move(100, 200)
# 把三個按鈕置為按下狀態
push_btn.setDown(True)
print(push_btn.isDown())  # 檢查是否按下
radio_btn.setDown(True)
checkbox.setDown(True)
push_btn.setCheckable(True)  # 設定按鈕是否可以被選中
print(push_btn.isCheckable())  # 檢查是否可以被選中
print(radio_btn.isCheckable())  # 檢查是否可以被選中
print(checkbox.isCheckable())  # 檢查是否可以被選中

radio_btn.setChecked(True)  # 設定按鈕為被選中
push_btn.setChecked(True)
checkbox.setChecked(True)

print(push_btn.isChecked())  # 檢查按鈕是否被選中
print(radio_btn.isChecked())
print(checkbox.isChecked())


def cao():
    print("cao")
    # push_btn.toggle()
    radio_btn.toggle()
    checkbox.toggle()
    push_btn.setChecked(not push_btn.isChecked())


btn.pressed.connect(cao)
push_btn.setEnabled(False)  # 設定按鈕是否可用
radio_btn.setEnabled(False)
checkbox.setEnabled(False)


排他性
  如果同時存在多個按鈕,而此時所有按鈕又設定了排他性,則在同一時刻只能選中一個按鈕

點選檢視程式碼
btn.setAutoExclusive(True)  # 設定是否有排他性
print(btn.autoExclusive())  # 檢查是否有排他性
  只有同級控制元件設定排他性才有效果

  對於QRadioButton,預設具有排他性,對於QCheckBox型別,預設不具有排他性


模擬點選:使用程式碼觸發按鈕點選
btn.click() # 模擬使用者點選
btn.animateClick(2000) # 帶有動畫的模擬點選(動畫顯示時間:ms)


設定點選有效區域

點選檢視程式碼
class Btn(QPushButton):
    def hitButton(self, point):
        print(point)  # 相對於按鈕左上角的座標(實時)
        if point.x() > self.width()/2:
            return True  # 傳出訊號
        return False  # 不傳出


btn = Btn(window)
btn.move(100, 100)
btn.resize(200, 200)
btn.setText("點選")
btn.pressed.connect(lambda: print("按鈕被點選了"))

可用訊號

點選檢視程式碼
btn = Btn(window)
btn.move(100, 100)
btn.resize(200, 200)
btn.setText("點選")
btn.setCheckable(True)
btn.pressed.connect(lambda: print("按鈕被按下了"))
btn.released.connect(lambda: print("按鈕被釋放了"))
btn.clicked.connect(lambda value: print("按鈕被點選了", value))  # value代表按鈕是否被選中
btn.toggled.connect(lambda value: print("按鈕選中狀態發生改變", value))  # value代表按鈕是否被選中\一般在單選框或核取方塊中使用

相關文章