连着用PyQt做了两次界面,网上中文资料太少和散,官方资料又是纯英文基于Qt的,对新手不太友好。
记录一下自己用到过的函数等。
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
1、这三个module是最常用的。
2、实现将窗口放在屏幕正中
self.desktop_width = QApplication.desktop().width() #屏幕尺寸
self.desktop_height = QApplication.desktop().height()
self.resize(350, 250)
self.move((self.desktop_width-self.width())/2,(self.desktop_height-self.height())/2) #将窗口放在屏幕中间
3、布局
okButton = QPushButton("OK")
cancelButton = QPushButton("Cancel")
hbox = QHBoxLayout()
hbox.addStretch(1)
hbox.addWidget(okButton)
hbox.addWidget(cancelButton)
vbox = QVBoxLayout()
vbox.addStretch(1)
vbox.addLayout(hbox)
self.setLayout(vbox)
QHBoxLayout、QVBoxLayout、QGridLayout分别是水平布局、垂直布局、网格布局,现在用第三个比较多,这个网上有很多资料。
4、设置按钮及按钮相关款式
#开始按钮
self.btn = QPushButton('Start',self) #注意后面一定要带上self
self.btn.move(200,250) #设置按钮相对窗口的相对位置
self.btn.setStyleSheet("QPushButton{background-color:#ffffff;border:1px;color:#000000;font-size:30px;width:80px;height:30px;}")
self.btn.setToolTip('Press and Push')
self.btn.clicked.connect(self.startState) #可以用connect连接一个函数,PyQt的信号与槽
self.show()
5、下拉选项框
self.comboBox = QComboBox(self)
self.comboBox.setGeometry(QRect(160, 40, 69, 22))
self.comboBox.setObjectName("comboBox")
self.comboBox.addItem("10~20")
self.comboBox.addItem("20~40")
self.comboBox.addItem("40~60")
self.comboBox.addItem("60以上")
self.comboBox.show()
6、List
self.AgeList = QListWidget(self)
self.AgeList.setObjectName("ageList")
item = QListWidgetItem("10岁-20岁")
self.AgeList.addItem(item)
item = QListWidgetItem("20岁-40岁")
self.AgeList.addItem(item)
item = QListWidgetItem("40岁-60岁")
self.AgeList.addItem(item)
item = QListWidgetItem("60岁以上")
self.AgeList.addItem(item)
self.AgeList.setStyleSheet("QListWidget{background-color:None;color:#000000;font-size:18px;}")
self.agelabel = QLabel("请选择你的年龄")
#void addWidget(QWidget *, int row, int column, int rowSpan, int columnSpan, Qt::Alignment = 0);
gridlayout.addWidget(self.agelabel,1,0,1,1)
gridlayout.addWidget(self.AgeList,0,1,3,3,Qt.AlignCenter)
获取list的内容:
age = self.AgeList.currentItem().text()
job = self.professionList.currentItem().text()
7、PyQt多媒体部分
from PyQt4.phonon import Phonon
PyQt4采用的是Phonon,PyQt5摒弃了,改用PyQt5.QtMultimedia
import PyQt5.QtMultimedia as media
有一个很全的demo,在最下面的github中。
8、页面跳转
PyQt5中实现界面的跳转有很多方式,这里介绍一种点击按钮弹出新窗体的方法。
首先,创建两个简单新窗体代码文件,并在窗口A的一个按钮上设置一个信号槽,连接到跳转函数jump,使用jump函数跳转到窗口B。注意,设置你要跳转的窗口为Dialog类,只有使用Dialog类才能使用这种跳转方法。
参考博客:https://www.cnblogs.com/qdzj/p/8974660.html
要注意的是跳转界面第二个必须使用QDialog类,不能使用QWidget,特别注意
在项目中涉及到页面跳转的部分代码:
def play_video(self):
self.hide() #将当前主窗口隐藏
QApplication.processEvents() #刷新屏幕
self.video.close() #关闭按钮
self.player = Player(sys.argv[1:]) #创建第二个窗口,第二个窗口设为Dialog类
self.player.show() #将第二个窗口显示出来
self.player.exec_()
self.show() #第二个窗口close之后第一个窗口显示出来
9、隐藏PyQt cmd自带的命令行窗口并设置背景图片
self.setWindowFlags(Qt.FramelessWindowHint) #隐藏边框
self.closebtn = QPushButton(self) #定义关闭按钮
self.closebtn.setIcon(QIcon("./src/close.png"))
self.closebtn.clicked.connect(self.close)
10、将窗口隐藏到系统托盘
可以将tuopan函数与一个按钮或者一个icon连接起来,一旦点击该按钮,就会触发该函数使得窗口被隐藏。
def tuopan(self):
tuopan = QSystemTrayIcon(self)
icon = QIcon('./src/logo.png')
tuopan.setIcon(icon)
tuopan.show()
tuopan.showMessage("brighter eyes", "你的护眼小助手被隐藏到这里了哦", icon=1)
# 如果不show(), 便不会显示, 后面的showMessage也会失效.
self.hide()
tuopan.activated.connect(self.show)
# 在系统托盘区域的图标被点击就会触发activated连接的函数(此例中是show函数)
附上自己觉得比较好的资料链接:
http://zetcode.com/gui/pyqt5/
一个比较全的PyQt5 examples:
https://github.com/baoboa/pyqt5/tree/master/examples