Qt开发-QT Widgets开发窗口设置

窗口设置

去掉顶部按钮

1
2
3
from PySide2.QtCore import QFile, Qt

mainWin.setWindowFlags(Qt.FramelessWindowHint)

工具条

经常我们会实现显示在桌面一侧的工具条,工具条一般都是置顶的,但是如果工具条会伸展或者不规则,我们就需要窗口的透明区域能够鼠标穿透。

窗口背景透明鼠标穿透置顶

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from PySide2.QtUiTools import QUiLoader
from PySide2.QtCore import QFile, Qt


class MyWin(QObject):
def __init__(self):
self.load_ui()

def load_ui(self):
self.ui = QUiLoader().load("form.ui")


if __name__ == "__main__":
app = QApplication([])
myWin = MyWin()
myWin.ui.setAttribute(Qt.WA_TranslucentBackground,True);
myWin.ui.setWindowFlags(Qt.FramelessWindowHint|Qt.Window|Qt.WindowStaysOnTopHint);
myWin.ui.show();

sys.exit(app.exec_())

注意

setAttribute(Qt.WA_TranslucentBackground,True)这句主要作用就是让窗口的透明区域鼠标穿透

setWindowFlags(Qt.FramelessWindowHint|Qt.Window|Qt.WindowStaysOnTopHint)设置窗口状态

  • Qt.FramelessWindowHint 无边框
  • Qt.Window 显示在状态栏
  • Qt.WindowStaysOnTopHint 窗口置顶

设置窗口的属性一定要在调用show()之前

常见属性

结合控件的SizePolicy属性,来控制布局管理中的控件的尺寸自适应方式。一些常用值的含义:

  • Fixed:控件不能放大或者缩小,控件的大小就是它的sizeHint。

  • Minimum:控件的sizeHint为控件的最小尺寸。控件不能小于这个sizeHint,但是可以放大。

  • Maximum:控件的sizeHint为控件的最大尺寸,控件不能放大,但是可以缩小到它的最小的允许尺寸。

  • Preferred:控件的sizeHint是它的sizeHint,但是可以放大或者缩小。

  • Expandint:控件可以自行增大或者缩小。

注:sizeHint(布局管理中的控件默认尺寸,如果控件不在布局管理中就为无效的值)

窗口逻辑代码

建议是每个窗口的逻辑写在单独的文件中

zwin/main_win.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from PySide2.QtWidgets import QWidget

from ui_form import Ui_Widget


class MainWindow(QWidget):
def __init__(self):
super(MainWindow, self).__init__()
self.ui = Ui_Widget()
self.ui.setupUi(self)
self.ui.loginBtn.clicked.connect(self.on_button_clicked)

def on_button_clicked(self):
print("登录!")

引用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import sys

from PySide2 import QtCore, QtGui, QtWidgets
from PySide2.QtCore import QFile, Qt
from PySide2.QtWidgets import QApplication, QWidget

import resources_rc
from zwin.main_win import MainWindow

if __name__ == "__main__":
app = QApplication(sys.argv)
# 读取资源文件中的 QSS 文件
qss_file = QtCore.QFile(":/qss/common.qss")
if qss_file.open(QtCore.QFile.ReadOnly | QtCore.QFile.Text):
qss_style = qss_file.readAll()
qss_style = str(qss_style, encoding='utf-8')
qss_file.close()

# 设置全局样式表
app.setStyleSheet(qss_style)
mainWin = MainWindow()
mainWin.setWindowFlags(Qt.FramelessWindowHint)
mainWin.show()
sys.exit(app.exec_())