天天看點

pyqt樣式表文法筆記pyqt樣式表文法筆記

pyqt樣式表文法筆記

pyqt

QSS

python

樣式表

因為軟體課設的原因開始學習使用pyqt4,才發現原來它也有樣式表,而且文法跟css基本相同,而且一些功能實作起來感覺比js要簡單友善得多。希望之後桌面軟體開發過程中可能遇到的各種bug不會讓我失去對pyqt的好感。

下面主要是經過我各種測試、瞎寫之後得到的一些總結,也就是說一些常用的文法或者其他需要注意的地方。

  • 要寫樣式表可以直接在Qt Designer裡編輯,官網給出的資料請參考如下連結 QSS樣式表規則
  • 編寫槽函數檔案
  1. from PyQt4.QtGui import QMainWindow 
  2. from PyQt4.QtCore import pyqtSignature 
  3. from PyQt4 import QtGui, QtCore 
  4. from ui import Ui_MainWindow 
  5. class MainWindow(QMainWindow, Ui_MainWindow): 
  6. def __init__(self, parent=None): 
  7. QMainWindow.__init__(self, parent) 
  8. self.setupUi(self) 
  9. @pyqtSignature("") 
  10. def on_changeColor_clicked(self): 
  11. self.l1.setStyleSheet("color:red") 

常用文法

  • 1.修改label的顔色、大小等

    self.label_id.setStyleSheet("color:red;")

  1. @pyqtSignature("") 
  2. def on_PushButton1_clicked(self): 
  3. self.l1.setStyleSheet("color:red;") 

以上代碼是一小部分的截取,稍微解釋一下。

@pyqtSignature("") 是裝飾器,用于給槽函數傳遞參數。

函數名on_PushButton1_clicked表示QPushButton的id名是“PushButton1”,隻要使用者點選這個按鍵,就會觸發下面的語句,即修改label(同理其id名為l1)的樣式表

(以下的例子同理,除特殊情況不再做具體介紹。)

  • 2.設定文本框的内容

    self.lineEdit.setText("修改文本框内容")

  1. @pyqtSignature("") 
  2. def on_PushButton2_clicked(self): 
  3. self.lineEdit.setText("修改文本框内容") 

若要重置文本框,則可設定setText(''),即設為空字元。

  • 3.擷取文本框中的内容

單行文本框lineEdit

  1. content = self.lineEdit.text() 

多行文本框textBrowser

  1. content = self.textBrowser.toPlainText() 
  • 4.向文本框的原有内容基礎上添加内容
  1. self.textEdit.append("要添加的内容") 
  • 5.radioButton使用介紹

使用場景:當我們安裝軟體的時候,總是會有一個所謂的"協定",然後問我們同不同意,然後沒辦法,我們隻能選同意咯~~

但是使用radioButton會遇到如下問題。

(1). 将radio控件分類

因為pyqt預設會将所有radio控件互斥,是以隻能選擇一個radioButton,比如當我們要做一個問卷調查的時候,我先選了第一題的答案,剛選完第二題的答案,結果第一題答案因為互斥的關系沒了,那豈不是很蛋疼,是以需要用到GroupBox來解決這個問題.如下圖

GroupsBox

(2). 耦合radio控件

還是以問卷為例,有的時候我們需要根據使用者的選擇進行相應題目的預設選擇,比如他的學校選擇了“北京大學”,那麼屬性那一欄應該選擇“學霸”,而不是“學渣”

  1. @pyqtSignature("") 
  2. def on_rb1_clicked(self): 
  3. self.rb3.setChecked(True) 
  4. @pyqtSignature("") 
  5. def on_rb2_clicked(self): 
  6. self.rb4.setChecked(True) 

rb1-北京大學 rb2-家裡蹲大學 rb3-學霸 rb4-學渣

setChecked(True) 表示選擇該項

isChecked() 可以用于判斷某選項是否被選擇。若已被選擇,就傳回True

  • 6.dial控件和slider控件

dial控件

slider控件

二者的主要作用是會發射"int"型的數值,預設是0-99,也可在Qt designer中自己設定,是以一般這兩者用到的槽函數是valueChanged(self,value),注意,不同于上面幾種控件,這兩種是要傳參的,是以裝飾器需要稍微修改一下,詳見下面帶代碼

  1. # 裝飾器需要聲明傳入int型的變量 
  2. @pyqtSignature("int") 
  3. def on_dial_valueChanged(self,value): 
  4. self.label_9.setStyleSheet("font-size:%dpx;" % value) 
  5. self.label_10.setText(str(value)) 

這段代碼的作用是,随着使用者旋轉dial控件,字型大小相應變化,右邊的label顯示目前字型的大小(即value)

dial示例

  • 7.對話框
  • (1) 提示對話框

    QMessageBox.information(self,'标題','提示資訊','OK','Cancel','其他')

解釋:上面參數中的'OK','Cancel','其他'表示對話框的可選項,一般預設是OK.

另外從左至右依次傳回0,1,2.

參考代碼

  1. @pyqtSignature("") 
  2. def on_information_clicked(self): 
  3. info = QMessageBox.information(self, 'information', u'提示對話框', 'OK', 'Cancel', u'其他') 
  4. print(info) 

information

  • (2) 詢問對話框

    QMessageBox.question(self,'标題','詢問資訊')

question

  • (3) 警告對話框

    QMessageBox.warning(self,'标題','提示資訊')

warning

  • (4) 嚴重警告對話框

    QMessageBox.critical(self,'标題','提示資訊')

critical

  • (5) 關于對話框

    QMessageBox.information(self,'标題','提示資訊')

about

  • (6) AboutQt對話框

    QMessageBox.information(self,'标題','提示資訊')

    這個是pyqt内置的,是以參數不能修改,隻能像下面這樣寫

  1. @pyqtSignature("") 
  2. def on_aboutQt_clicked(self): 
  3. aboutQt = QMessageBox.aboutQt(self, 'AboutQt') 

aboutQt