pyqt 界面的 python 方法记录

最近几个项目的界面都使用了 pyqt 库,比如商城中的抽奖机器人,新手指引机器人等,在这里不得不夸一下 Pyqt 的强大与优美:
pyqt 界面的 python 方法记录

由于在此项目之前,我也没有用过 qt,项目开发过程中学习了很多知识也遇到了不少问题,很多到现在也只是一知半解,在此记录下我遇到的问题和我的解决方法。
刚开始的界面设计,我也是根据教程使用 QtDesigner 和 PyUIC 生成界面代码,这应该是个不错的选择,但我真的手残用不来,于是转而自己写代码,感觉更好处理。

一、我用到的一些部件

pyqt 界面的 python 方法记录

其他用到的函数:

QLineEdit:setPlaceholderText(‘设置默认提示语’)、
      setMaxLength() 最大可输入长度、
QLabel:setAlignment(Qt.AlignCenter) 使 label 中的文字居中;
QComboBox : 使用 addItem(‘a’) 或 addItems(list) 添加选项,可以添加一个列表;

二、按钮点击事件

为按钮添加点击事件,按钮被点击时执行对应函数,函数不加括号。

pushButton.clicked.connect(self.function)

三、多个界面之间的跳转

本以为实现这一功能不会很难,结果发现自己想的有些简单,最后用了一个看似解决了这个问题的简单方法:创建 jump.py 文件将其作为主文件,创建按钮点击事件实现不同窗口的显示 .show()与隐藏 .hide() 。
 如:

from windowA import *
from windowB import *
from windowC import *

app = QApplication(sys.argv)
wa = windowA()
wb = windowB()
wc = windowC()
wa.mainWnd.show()

def eventA():
   wb.mainWnd.show()
   wa.mainWnd.hide()
def eventB():
   wc.mainWnd.show()
   wb.mainWnd.hide()

wa.pushButton.clicked.connect(eventA)
wb.pushButton.clicked.connect(eventB)

if __name__ == "__main__":
   app.aboutToQuit.connect(app.deleteLater)
   app.exit(app.exec_())
   

四、美化

说不上美化,只是对界面进行一些改变,毕竟我是被贺导吐槽有审美缺陷的人。

布局

setSpacing(10) : 各个部件之间的距离;
setContentMargin(10, 10, 10, 10) : 表示部件与窗体的边距,分别为左上右下的边距;
self.setGeometry(100,300,500,400) : 设置窗口在屏幕的位置并设定窗口大小;
addWidget(label, 0, Qt.AlignTop | Qt.AlignCenter) : 参数为 (QWidget, stretch, alignment),添加部件时可设置伸缩量和对齐方式,使用 | 组合;
对齐方式有:
Qt.AlignLeft、Qt.AlignRight、Qt.AlignHCenter 水平方向居中、Qt.AlignVCenter、Qt.AlignJustify 水平方向调整间距两端对齐、Qt.AlignTop、Qt.AlignButton、Qt.AlignCenter
addStretch() : 使一个部件向上(或左)对齐后往往无法另下一个向下(或右)对齐,此时需在这之间添加 Stretch;

部件

setFixedSize(50, 50) : 设置固定大小;
setMaximumHeight(80) : 设置最大高度,同理可设置最小和宽度;
setFont(QFont(“Microsoft YaHei”,25,75)) :
setStyleSheet() : 可以设置 background 背景颜色(可用英文代码、RGB 颜色值、十六进制颜色码表示)、background-image 背景图片、color 字体颜色、font 字体大小、border 边界宽度 颜色、border-radius 边界圆角角度等属性
 如:

self.button.setStyleSheet('color:rgb(52,196,243,200);border-radius:25px;border:4px solid rgb(52,196,243);background:#D2E9FF;')  # RGB第四位表示透明度,0~255
self.label.setStyleSheet('color:CornflowerBlue;background-image:url(1.jpg);border-bottom-left-radius:20px')  
# 只设置左下边界圆角	

其他

QApplication.setStyle(‘Fusion’) : Application 界面风格设置;

self.setWindowFlag(QtCore.Qt.FramelessWindowHint) # 隐藏边框
self.setAttribute(QtCore.Qt.WA_TranslucentBackground) # 设置窗口背景透明
界面风格不合我心意,于是隐藏边框、设置背景透明,自定义标题栏;

有关透明度:
设置颜色透明度:rgb(255, 255, 255, 200) 最后一位表示颜色透明度,0~255
设置界面透明度:self.setWindowOpacity(0.91)

使用 HTML 标签美化文字,由此可实现同一 label 不同字号、颜色等;
如:

label.setText('<font size="30" face="Microsoft Yahei" ><b style="color:rgb(52,196,243)">WubbaLubba</b></font><h6>'+ "DubDub")