pyqt5讲解13:图形与特效,设置窗口大小
一.窗口的風格
可以為每個QWidget都設置風格
setStyle(QStyle style)
獲取當前平臺支持的原有的QStyle樣式
QstyleFactory.keys()
對QApplication設置QStyle樣式
QApplication.setStyle(QStyleFactory.create(‘WindowsXP’))
風格大全
Windows
WindowsXP
WindowsVista
Fusion
如果其他Widget沒有設置QStyle,默認使用QApplication設置的style
算例1
import sys from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5 import QtCore from PyQt5.QtGui import *class AppWidget( QWidget):def __init__(self, parent=None):super(AppWidget, self).__init__(parent)self.setWindowTitle("界面風格例子")horizontalLayout = QHBoxLayout()self.styleLabel = QLabel("Set Style:")self.styleComboBox = QComboBox()# 增加 styles 從 QStyleFactoryself.styleComboBox.addItems( QStyleFactory.keys())# 選擇當前界面風格index = self.styleComboBox.findText(QApplication.style().objectName(),QtCore.Qt.MatchFixedString)# 設置當前界面風格self.styleComboBox.setCurrentIndex(index)# 通過comboBox選擇界面分割self.styleComboBox.activated[str].connect(self.handleStyleChanged)horizontalLayout.addWidget(self.styleLabel)horizontalLayout.addWidget(self.styleComboBox)self.setLayout(horizontalLayout)# 改變界面風格def handleStyleChanged(self, style):QApplication.setStyle(style)if __name__ == "__main__":app = QApplication(sys.argv)widgetApp = AppWidget()widgetApp.show()sys.exit(app.exec_())算例2
import sys from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QPushButton from PyQt5.QtWidgets import * class Winform(QWidget):def __init__(self, parent=None):super(Winform, self).__init__(parent)self.setWindowTitle("水平布局管理例子")# 水平布局按照從左到右的順序進行添加按鈕部件。hlayout = QHBoxLayout()hlayout.addWidget(QPushButton(str(1)))hlayout.addWidget(QPushButton(str(2)))hlayout.addWidget(QPushButton(str(3)))hlayout.addWidget(QPushButton(str(4)))hlayout.addWidget(QPushButton(str(5)))self.setLayout(hlayout)if __name__ == "__main__":app = QApplication(sys.argv)QApplication.setStyle(QStyleFactory.create('Windows'))form = Winform()form.show()sys.exit(app.exec_())WindowsXP
二.設置窗口的樣式
基本窗口類型
| Qt.Widget | 默認窗口,有最小化,最大化,關閉按鈕 |
| Qt.Window | 普通窗口,有最小化,最大化,關閉按鈕 |
| Qt.Dialog | 會話框窗口,有問號和關閉按鈕 |
| Qt.Popup | 彈出窗口,窗口無邊框 |
| Qt.ToolTip | 提示窗口,窗口無邊框,無任務欄 |
| Qt.SplashScreen | 閃屏,窗口無邊框,無任務欄 |
| Qt.SubWindow | 子窗口,窗口無按鈕,但有標題 |
自定義頂層窗口外觀標志
| Qt.MSWindowsFixedSizeDialogHint | 固定窗口,無法調整大小 |
| Qt.FramelessWindowHint | 窗口無邊框 |
| Qt.CustomizeWindowHint | 有邊框,無標題欄與按鈕,不能移動和拖動 |
| Qt.WindowTitleHint | 添加標題欄與關閉按鈕 |
| Qt.WindowSystemMenuHint | 添加系統目錄和關閉按鈕 |
| Qt.WindowMaximizeButtonHint | 激活最大化按鈕與關閉按鈕,禁止最小化按鈕 |
| Qt.WindowMinimizeButtonHint | 激活最小化按鈕與關閉按鈕,禁止最大化按鈕 |
| Qt.WindowMinMaxButtonsHint | 激活最大化與最小化按鈕和關閉按鈕 |
| Qt.WindowCloseButtonHint | 添加一個關閉按鈕 |
| Qt.WindowStaysOnTopHint | 窗口始終處于頂部位置 |
| Qt.windowStaysOnButtonHint | 窗口始終處于底部位置 |
算例
# -*- coding: utf-8 -*- """【簡介】設置窗口樣式""" from PyQt5.QtCore import Qt import sys from PyQt5.QtWidgets import QMainWindow, QApplicationclass MainWindow(QMainWindow):def __init__(self, parent=None):super(MainWindow, self).__init__(parent)self.resize(477, 258)self.setWindowTitle("設置窗口樣式例子")# 設置窗口樣式為窗口無邊框化self.setWindowFlags(Qt.SubWindow)self.setObjectName("MainWindow")self.setStyleSheet("#MainWindow{border-image:url(duoren.jpg);}")if __name__ == "__main__":app = QApplication(sys.argv)win = MainWindow()win.show()sys.exit(app.exec_())三.QSS 的 UI 美化
QSS(Qt Style Sheets)即 Qt 樣式表,用于自定義控件外觀,QSS 類似于 CSS 但沒有 CSS 的功能強大,選擇器較少。
1、QSS 的語法規則
QSS 的語法規則與 CSS 類似,都由兩部分:選擇器和聲明構成;選擇器指定哪些控件會受影響,聲明指定哪些屬性應該在控件上進行設置。
聲明由屬性和屬性值構成,其形式:屬性:值。
QPushButton {color:red}
算例1
from PyQt5.QtWidgets import * import sys class WindowDemo(QWidget): def __init__(self ): super().__init__()btn1 = QPushButton(self ) btn1.setText('按鈕1')btn2 = QPushButton(self ) btn2.setText('按鈕2') vbox=QVBoxLayout()vbox.addWidget(btn1)vbox.addWidget(btn2) self.setLayout(vbox)self.setWindowTitle("QSS樣式")if __name__ == "__main__": app = QApplication(sys.argv) win = WindowDemo() qssStyle = ''' QPushButton{ background-color: green; }'''win.setStyleSheet( qssStyle ) win.show() sys.exit(app.exec_())QSS 選擇器有以下幾種類型:這些都是前端css里的內容
通配選擇器:*, 匹配所有的控件。
類型選擇器:類名,匹配所有的該類及其子類的控件,如,QPushButton。
屬性選擇器:類名[屬性=屬性值],如,QPushButton[name=“myBtn”],匹配所有 name 屬性為 myBtn 的 QPushButton 實例;屬性可以是自定義的,不一定非得類本身具有的屬性。
類選擇器:.類名(注意:前面有一個點號),匹配該類的所有實例,不包括子類。
ID 選擇器:#ID標識符,匹配所有 ID標識符 符合的控件,ID 即為 objectName 指定的值。
后代選擇器:例如 QDialog QPushButton,匹配所有的 QDialog 容器中包含的 QPushButton,不管是間接還是直接。
子選擇器:例如:QDialog > QPushButton,匹配所有 QDialog 容器中包含的 QPushButton,其中要求 QPushButton 的直接父容器為 QDialog。
3、QSS 子控件
算例2
from PyQt5.QtWidgets import * import sys class WindowDemo(QWidget): def __init__(self ): super().__init__()btn1 = QPushButton(self ) btn1.setText('按鈕1')btn2 = QPushButton(self ) btn2.setProperty( 'name' , 'myBtn' )btn2.setText('按鈕2') vbox=QVBoxLayout()vbox.addWidget(btn1)vbox.addWidget(btn2) self.setLayout(vbox)self.setWindowTitle("QSS樣式")if __name__ == "__main__": app = QApplication(sys.argv) win = WindowDemo() qssStyle = ''' QPushButton[name="myBtn"] { background-color: red }'''win.setStyleSheet( qssStyle ) win.show() sys.exit(app.exec_())還可以通過setStyleSheet 來設置樣式
import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import *class Form(QDialog):def __init__(self, parent=None):super(Form, self).__init__(parent)layout = QVBoxLayout()self.btn1 = QPushButton("Button1")self.btn1.setStyleSheet("background-color:#ffffff; color:red;")layout.addWidget(self.btn1)self.btn2 = QPushButton('image')layout.addWidget(self.btn2)self.setLayout(layout)self.setWindowTitle("Button demo")if __name__ == '__main__':app = QApplication(sys.argv)btnDemo = Form()btnDemo.show()sys.exit(app.exec_())常見樣式:
在樣式表中,每個部件都被看作是一個由四個同心相似的矩形組成的箱體:
空白(margin)、邊框(border)、填充(padding)和內容(content)。
對于一個平面部件——例如一個空白、邊框和填充都是0像素的部件——而言,這四個矩形是完全重合的。
空白區域位于邊框外,并且總是透明的。
邊框為部件提供了四周的框架,其border-style屬性可以設置為一些內置的框架風格,如inset、outset、solid和ridge。
填充在邊框和內容區域之間提供了空白間隔。
部件的前景色用于繪制上面的文本,可以通過color屬性指定。
背景色用于繪制部件的填充矩形,可以通過background-color屬性指定。
背景圖片使用background-image屬性定義,它用于繪制由background-origin指定的矩形區域(空白、邊框、填充或內容)。
背景 圖片在矩形區域內的對齊和平鋪方式可以通過background-position和background-repeat屬性指定。
如果指定的背景圖片具有alpha通道(即有半透明效果),通過background-color指定的顏色將會透過透明區域。這一功能可以使背景圖片在多種環境下重復利用。
該例子中使用的樣式表如下所示:
QFrame {
margin: 10px;
border: 2px solid green;
padding: 20px;
background-color: gray;
background-image: url(qt.png);
background-position: top right;
background-origin: content;
background-repeat: none;
}
實際上margin屬性可以在上下左右四個方向分別指定我們需要的不同值,例如:QFrame {
margin: 14px 18px 20px 18px;
}
都是前端css里的內容,忘記啦。
設置窗口大小
self.setWindowIcon(QIcon('2345_image_file_copy_1.jpg')) self.setFixedSize(1200, 700) self.setMinimumSize(1200, 700) self.setMaximumSize(1200, 700)電氣工程的計算機萌新,寫博文不容易,如果你覺得本文對你有用,請點個贊支持下,謝謝。
總結
以上是生活随笔為你收集整理的pyqt5讲解13:图形与特效,设置窗口大小的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蟑螂的习性有?
- 下一篇: 吉林省长春市九台区邮编是多少