pyqt樣式表語法筆記(上)
因為軟件課設的原因開始學習使用pyqt4,才發現原來它也有樣式表,而且語法跟css基本相同,而且一些功能實現起來感覺比js要簡單方便得多。希望之后桌面軟件開發過程中可能遇到的各種bug不會讓我失去對pyqt的好感。
下面主要是經過我各種測試、瞎寫之后得到的一些總結,也就是說一些常用的語法或者其他需要注意的地方。
-
要寫樣式表可以直接在Qt Designer里編輯,官網給出的資料請參考如下鏈接
QSS樣式表規則
常用命令行--轉化文件
-
編寫槽函數文件
代碼示例
- from PyQt4.QtGui imp
ort QMainWindow - from PyQt4.QtCore imp
ort pyqtSignature - from PyQt4 imp
ort QtGui, QtCore - from ui imp
ort Ui_MainWindow -
- class MainWindow(QMainWindow, Ui_MainWindow):
- def __init__(self, parent=None):
- QMainWindow.__init__(self, parent)
- self.setupUi(self)
-
- @pyqtSignature("")
- def on_changeColor_clicked(self):
- self.l1.setStyleSheet("color:red")
常用語法
-
1.修改label的顏色、大小等
self.label_id.setStyleSheet("color:red;")
- @pyqtSignature("")
- def on_PushButton1_clicked(self):
- self.l1.setStyleSheet("color:red;")
以上代碼是一小部分的截取,稍微解釋一下。
@pyqtSignature("") 是裝飾器,用於給槽函數傳遞參數。
函數名on_PushButton1_clicked表示QPushButton的id名是“PushButton1”,只要用戶點擊這個按鍵,就會觸發下面的語句,即修改label(同理其id名為l1)的樣式表
(以下的例子同理,除特殊情況不再做具體介紹。)
-
2.設置文本框的內容
self.lineEdit.setText("修改文本框內容")
- @pyqtSignature("")
- def on_PushButton2_clicked(self):
- self.lineEdit.setText("修改文本框內容")
若要重置文本框,則可設置setText(''),即設為空字符。
- 3.獲取文本框中的內容
單行文本框lineEdit
多行文本框textBrowser
- 4.向文本框的原有內容基礎上添加內容
- 5.radioButton使用介紹
使用場景:當我們安裝軟件的時候,總是會有一個所謂的"協議",然后問我們同不同意,然后沒辦法,我們只能選同意咯~~
但是使用radioButton會遇到如下問題。
(1). 將radio控件分類
因為pyqt默認會將所有radio控件互斥,所以只能選擇一個radioButton,比如當我們要做一個問卷調查的時候,我先選了第一題的答案,剛選完第二題的答案,結果第一題答案因為互斥的關系沒了,那豈不是很蛋疼,所以需要用到GroupBox來解決這個問題.如下圖
(2). 耦合radio控件
還是以問卷為例,有的時候我們需要根據用戶的選擇進行相應題目的默認選擇,比如他的學校選擇了“北京大學”,那么屬性那一欄應該選擇“學霸”,而不是“學渣”
- @pyqtSignature("")
- def on_rb1_clicked(self):
- self.rb3.setChecked(True)
-
- @pyqtSignature("")
- def on_rb2_clicked(self):
- self.rb4.setChecked(True)
rb1-北京大學 rb2-家里蹲大學 rb3-學霸 rb4-學渣
setChecked(True) 表示選擇該項
isChecked() 可以用於判斷某選項是否被選擇。若已被選擇,就返回True
- 6.dial控件和slider控件
二者的主要作用是會發射"int"型的數值,默認是0-99,也可在Qt designer中自己設定,所以一般這兩者用到的槽函數是 valueChanged(self,value) ,注意,不同於上面幾種控件,這兩種是要傳參的,所以裝飾器需要稍微修改一下,詳見下面帶代碼
- # 裝飾器需要聲明傳入int型的變量
- @pyqtSignature("int")
- def on_dial_valueChanged(self,value):
- self.label_9.setStyleSheet("font-size:%dpx;" % value)
- self.label_10.setText(str(value))
這段代碼的作用是,隨着用戶旋轉dial控件,字體大小相應變化,右邊的label顯示當前字體的大小(即value)
- 7.對話框
-
(1) 提示對話框
QMessageBox.information(self,'標題','提示信息','OK','Cancel','其他')
解釋:上面參數中的'OK','Cancel','其他'表示對話框的可選項,一般默認是OK.
另外從左至右依次返回0,1,2.
參考代碼
- @pyqtSignature("")
- def on_information_clicked(self):
- info = QMessageBox.information(self, 'information', u'提示對話框', 'OK', 'Cancel', u'其他')
- print(info)
-
(2) 詢問對話框
QMessageBox.question(self,'標題','詢問信息')
-
(3) 警告對話框
QMessageBox.warning(self,'標題','提示信息')
-
(4) 嚴重警告對話框
QMessageBox.critical(self,'標題','提示信息')
-
(5) 關於對話框
QMessageBox.information(self,'標題','提示信息')
-
(6) AboutQt對話框
QMessageBox.information(self,'標題','提示信息')
這個是pyqt內置的,所以參數不能修改,只能像下面這樣寫
- @pyqtSignature("")
- def on_aboutQt_clicked(self):
- aboutQt = QMessageBox.aboutQt(self, 'AboutQt')
