本文将介绍一些pyqt5基本使用技巧,不借助Qtdesigner,而是全部用代码编写,将实现页面布局、窗口自适应、字体自适应等功能。一般的简易工程均可使用,简单高效。对于pyqt5的一些基本技巧,本文内容基本够用,可以快速实现自己想要的界面。
14、Layout自适应窗口布局
使用方式一般为:首先定义Layout的布局方式(如水平布局、垂直布局、网格布局等),然后通过addWidget可以增加标签、按钮等控件,或通过addLayout添加布局。最后一个布局调用setLayout函数即可。利用.addStretch可以设置控件之间的距离,可认为是剩余空白位置的比例。
Layout可以看作是将一些控件进行了打包和布局,形成了一个模块。进而这个模块可以通过addLayout的方式,像控件一样添加到其他布局当中。
(1)水平布局QHBoxLayout,将空间按照水平方向进行摆放。
hbox = QHBoxLayout()
hbox.addWidget(控件1)
hbox.addWidget(控件2)
hbox.addLayout(布局1)
hbox.addLayout(布局2)
(2)垂直布局QVBoxLayout,将空间按照垂直方向进行摆放,使用方式同QHBoxLayout。
(3)网格布局QGridLayout,划分成网格,按照行列布局。
grid.addWidget(控件1, 行, 列)
grid = QGridLayout()
grid.addWidget(控件1, 1, 1)
grid.addWidget(控件2, 1, 2)
grid.addLayout(布局1, 2, 1)
grid.addLayout(布局2, 2, 2)
(4)参考代码:
grid1 = QGridLayout()
grid1.addWidget(self.label1, 1, 1)
grid1.addWidget(self.label2, 1, 2)
grid1.addWidget(self.label3, 1, 3)
grid1.addWidget(self.label11, 2, 1)
grid1.addWidget(self.label12, 2, 2)
grid1.addWidget(self.text1, 2, 3)
grid2 = QGridLayout()
grid2.addWidget(self.btn1, 1, 1)
grid2.addWidget(self.btn2, 1, 2)
grid3 = QGridLayout()
grid3.addWidget(self.btn3, 1, 1)
grid3.addWidget(self.btn4, 1, 2)
grid3.addWidget(self.btn5, 1, 3)
hbox = QHBoxLayout()
hbox.addStretch(2)
hbox.addLayout(grid2)
hbox.addStretch(2)
hbox.addLayout(grid3)
hbox.addStretch(3)
vbox = QVBoxLayout()
vbox.addLayout(grid1)
vbox.addStretch(1)
vbox.addLayout(hbox)
vbox.addStretch(1)
self.setLayout(vbox)
15、重写resize函数
重写resizeEvent函数可自适应窗口大小,并且可以自动调整字体大小,关键是通过event.size().width()和event.size().height()函数实时获取主窗口大小。
def resizeEvent(self, event):
#900为窗口初始尺寸
font_size = event.size().width() * 30 // int(900 * self.scale_ratio)
config = "QLabel{font-size:"+str(font_size)+"px;font-weight:bold;font-family:宋体;}"
self.label1.setStyleSheet(config)
self.label2.setStyleSheet(config)
self.label3.setStyleSheet(config)
w = event.size().width() * 320 // 900
h = event.size().height() * 320 // 400
self.label11.resize(w, h)
self.label12.resize(w, h)
self.text1.setFixedSize(w*200//320, h)
btn_font_size = event.size().width() * 25 // int(900 * self.scale_ratio)
config = "QPushButton{font-size:"+str(btn_font_size)+"px;font-weight:bold;font-family:宋体;}"
self.btn1.setStyleSheet(config)
self.btn2.setStyleSheet(config)
self.btn3.setStyleSheet(config)
self.btn4.setStyleSheet(config)
self.btn5.setStyleSheet(config)
16、重写关闭窗口函数closeEvent
避免python后台在关闭窗口时仍然继续运行
def closeEvent(self, event):
import os
os._exit(1)


被折叠的 条评论
为什么被折叠?



