跳至主要內容

修改樣式

Jia-Yin大约 1 分鐘comm

上面按鈕的樣式設定,是在 QtDesigner 中各別設定。如果仔細觀察,會發現 ICRT 的高度比較小一點點,這是因為英文字形與中文字形高度不一的緣故。我們可以在將每個按鈕的 minimumSize 及 maximumSize 的高度都設成一樣的值,例如 36,這樣的話,每個按鈕的高度就會一致了。

另外,我們也可以在程式中進行樣式的設定。以下我們修改主程式,並加入設定按鈕樣式的程式碼:

  1. __init__ 中修改按鍵的事件連接函數,並加上按鍵的樣式設定函數:

    self.bICRT.clicked.connect(lambda: self.setFreq(100.7, self.bICRT))
    self.bFengCheng.clicked.connect(lambda: self.setFreq(98.7, self.bFengCheng))
    self.bGuoJi.clicked.connect(lambda: self.setFreq(101.1, self.bGuoJi))
    self.setButtonsStyle()
    
  2. 在類別中新增以下方法:

    def setButtonsStyle(self):
        for button in [self.bICRT, self.bFengCheng, self.bGuoJi, self.bClose]:
            self.setButtonInActive(button)
    
    def setButtonActive(self, button):
        button.setStyleSheet("""
            QPushButton {
                background-color: orange;
                color: black;
                border: none;
                padding: 10px;
                border-radius: 12px;
            }
            QPushButton:hover {
                background-color: red;
            }
        """)
    
    def setButtonInActive(self, button):
        button.setStyleSheet("""
            QPushButton {
                background-color: #64B5F6;
                color: white;
                border: none;
                padding: 10px;
                border-radius: 12px;
            }
            QPushButton:hover {
                background-color: red;
            }
        """)
    
  3. 然後修改 setFreq 方法,新增一個參數,並加上設定樣式的程式碼:

    def setFreq(self, freq, button):
        self.grc.analog_sig_source_x_0.set_frequency(100e6-freq*1e6)
        for but in [self.bICRT, self.bFengCheng, self.bGuoJi]:
            if but == button: self.setButtonActive(but)
            else: self.setButtonInActive(but)
    

最後執行結果如下圖所示:

練習 4

依上述說明,設計一個自己喜歡的電台接收器。