pyqt樣式表文法筆記
pyqt
QSS
python
樣式表
因為軟體課設的原因開始學習使用pyqt4,才發現原來它也有樣式表,而且文法跟css基本相同,而且一些功能實作起來感覺比js要簡單友善得多。希望之後桌面軟體開發過程中可能遇到的各種bug不會讓我失去對pyqt的好感。
下面主要是經過我各種測試、瞎寫之後得到的一些總結,也就是說一些常用的文法或者其他需要注意的地方。
- 要寫樣式表可以直接在Qt Designer裡編輯,官網給出的資料請參考如下連結 QSS樣式表規則
- 編寫槽函數檔案
- 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")
常用文法
-
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
- content = self.lineEdit.text()
多行文本框textBrowser
- content = self.textBrowser.toPlainText()
- 4.向文本框的原有内容基礎上添加内容
- self.textEdit.append("要添加的内容")
- 5.radioButton使用介紹
使用場景:當我們安裝軟體的時候,總是會有一個所謂的"協定",然後問我們同不同意,然後沒辦法,我們隻能選同意咯~~
但是使用radioButton會遇到如下問題。
(1). 将radio控件分類
因為pyqt預設會将所有radio控件互斥,是以隻能選擇一個radioButton,比如當我們要做一個問卷調查的時候,我先選了第一題的答案,剛選完第二題的答案,結果第一題答案因為互斥的關系沒了,那豈不是很蛋疼,是以需要用到GroupBox來解決這個問題.如下圖
GroupsBox
(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控件
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)
dial示例
- 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)
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内置的,是以參數不能修改,隻能像下面這樣寫
- @pyqtSignature("")
- def on_aboutQt_clicked(self):
- aboutQt = QMessageBox.aboutQt(self, 'AboutQt')
aboutQt