pyqt樣式表語法筆記(上)
由於軟件課設的緣由開始學習使用pyqt4,才發現原來它也有樣式表,並且語法跟css基本相同,並且一些功能實現起來感受比js要簡單方便得多。但願以後桌面軟件開發過程當中可能遇到的各類bug不會讓我失去對pyqt的好感。css
下面主要是通過我各類測試、瞎寫以後獲得的一些總結,也就是說一些經常使用的語法或者其餘須要注意的地方。html
-
要寫樣式表能夠直接在Qt Designer裏編輯,官網給出的資料請參考以下連接
QSS樣式表規則
經常使用命令行--轉化文件python
- # 將ui文件轉化爲.py文件
- pyuic4 **.ui > **.py
- # 將qrc文件轉化爲.py文件
- pyrcc4 **.qrc > **.py
- from PyQt4.QtGui import QMainWindow
- from PyQt4.QtCore import pyqtSignature
- from PyQt4 import QtGui, QtCore
- from ui import 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")
經常使用語法web
-
1.修改label的顏色、大小等
self.label_id.setStyleSheet("color:red;")
- @pyqtSignature("")
- def on_PushButton1_clicked(self):
- self.l1.setStyleSheet("color:red;")
以上代碼是一小部分的截取,稍微解釋一下。
@pyqtSignature("") 是裝飾器,用於給槽函數傳遞參數。app
函數名on_PushButton1_clicked表示QPushButton的id名是「PushButton1」,只要用戶點擊這個按鍵,就會觸發下面的語句,即修改label(同理其id名爲l1)的樣式表ide
(如下的例子同理,除特殊狀況再也不作具體介紹。)函數
-
2.設置文本框的內容
self.lineEdit.setText("修改文本框內容")
- @pyqtSignature("")
- def on_PushButton2_clicked(self):
- self.lineEdit.setText("修改文本框內容")
若要重置文本框,則可設置setText(''),即設爲空字符。學習
單行文本框lineEdit測試
- content = self.lineEdit.text()
多行文本框textBrowser字體
- content = self.textBrowser.toPlainText()
- self.textEdit.append("要添加的內容")
使用場景:當咱們安裝軟件的時候,老是會有一個所謂的"協議",而後問咱們同不一樣意,而後沒辦法,咱們只能選贊成咯~~
可是使用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
兩者的主要做用是會發射"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')