申明
学习资料来源于https://download.youkuaiyun.com/download/l1505624/9627827
感谢作者
设置窗口
首先导入sys宏包,这是为了接收sys.args参数。
定义MyWidget类,继承自QWidget类,这里是是通过swtGeometry方法调整窗口,后面可以用resize的方法调整
import sys
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.setGeometry(0,0,800,800)
self.setWindowTitle("Maapp")
self.setWindowIcon(QIcon \
("E:\py_code\作业\第三次作业\mm.jpg"))
myapp=QApplication(sys.argv)
mywidget=MyWidget()
mywidget.show()
sys.exit(myapp.exec_())
弹出提示信息
self.setToolTip("看什么看")
QToolTip.setFont(QFont("微软雅黑",12))
来设置信息和字体。
import sys
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class Mywindget(QWidget):
def __init__(self):
super().__init__()
self.resize(800,600)
self.setWindowTitle("myapp")
self.setWindowIcon(QIcon("E:\py_code\作业\第三次作业\mm.jpg"))
self.setToolTip("看什么看")
QToolTip.setFont(QFont("微软雅黑",12))
#
myapp=QApplication(sys.argv)
mywindge=Mywindget()
mywindge.show()
sys.exit(myapp.exec_())
鼠标放上去一段时间就能显示信息
关闭时询问窗口
定义closeEvent类,接收event,用QMessageBos来设置询问窗口和接受确认信息。
import sys
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class Mywindget(QWidget):
def __init__(self):
super().__init__()
self.resize(800,600)
self.setWindowTitle("myapp")
self.setWindowIcon(QIcon("E:\py_code\作业\第三次作业\mm.jpg"))
self.setToolTip("看什么看")
QToolTip.setFont(QFont("微软雅黑",12))
def closeEvent(self, event):
reply = QMessageBox.question(self, "信息", "你确定要退出吗",
QMessageBox.Yes, QMessageBox.No)
if reply == QMessageBox.Yes:
event.accept()
else:
event.ignore()
myapp=QApplication(sys.argv)
mywindge=Mywindget()
mywindge.show()
sys.exit(myapp.exec_())
窗体居中显示
核心代码
def center(self):
screen=QDesktopWidget().screenGeometry()
size=self.geometry()
self.move((screen.width()-size.width())/2,
(screen.height()-size.height()/2))
QDesktopWidget().screenGeometry() 这个得到的时屏幕的大小
size=self.geometry() 这个得到的是窗体大小。
self.move((screen.width()-size.width())/2,
(screen.height()-size.height()/2)) 这是居中操作
import sys
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class Mywidget(QWidget):
def __init__(self):
super().__init__()
self.resize(800,600)
self.center()
self.setWindowTitle("我的第一个app")
self.setWindowIcon(QIcon\
("E:\py_code\作业\第三次作业\mm.jpg"))
self.setToolTip("想知道什么")
QToolTip.setFont(QFont\
("微软雅黑",12))
def closeEvent(self, event):
reply=QMessageBox.question\
(self,"信息",
"你确定要离开吗",
QMessageBox.Yes,QMessageBox.No)
if reply==QMessageBox.Yes:
event.accept()
else:
event.ignore()
def center(self):
screen=QDesktopWidget().screenGeometry()
size=self.geometry()
self.move((screen.width()-size.width())/2,
(screen.height()-size.height())/2)
myapp=QApplication(sys.argv)
mywidget=Mywidget()
mywidget.show()
sys.exit(myapp.exec_())
QMainQWindow类
QtGui.QMainWindow类提供应用程序主窗口,可以创建一个经典的拥有状态栏,工具栏和菜单栏的应用程序骨架。
我们前面的例子使用的都是QtGui.QWidget类创建的窗体。
QtGui.QWidget在qt中是所有可画类的基础,任何基于QWidget类都可以作为独立的窗口显示出来二不需要parent
QMainWindow类是针对主窗体的一般需求设定的,它预定了菜单状态栏和其他widget(窗口小部件)。因为它继承自Qwidget,前面所有的属性修改都适用于它。
import sys
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class Mywidget(QMainWindow):
def __init__(self):
super().__init__()
self.resize(800,600)
self.center()
self.setWindowTitle("我的第一个app")
self.setWindowIcon(QIcon\
("E:\py_code\作业\第三次作业\mm.jpg"))
self.setToolTip("想知道什么")
QToolTip.setFont(QFont\
("微软雅黑",12))
def closeEvent(self, event):
reply=QMessageBox.question\
(self,"信息",
"你确定要离开吗",
QMessageBox.Yes,QMessageBox.No)
if reply==QMessageBox.Yes:
event.accept()
else:
event.ignore()
def center(self):
screen=QDesktopWidget().screenGeometry()
size=self.geometry()
self.move((screen.width()-size.width())/2,
(screen.height()-size.height())/2)
myapp=QApplication(sys.argv)
mywidget=Mywidget()
mywidget.show()
sys.exit(myapp.exec_())
把继承的类换掉之后运行良好。
加上状态栏
在初始化方法里加上一个self.statusBar().showMessage(“程序已经就绪”)。
也可以在下面写
import sys
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class Mywidget(QMainWindow):
def __init__(self):
super().__init__()
self.resize(800,600)
self.center()
self.setWindowTitle("我的第一个app")
self.setWindowIcon(QIcon\
("E:\py_code\作业\第三次作业\mm.jpg"))
self.setToolTip("想知道什么")
QToolTip.setFont(QFont\
("微软雅黑",12))
self.statusBar().showMessage("程序已经就绪")
def closeEvent(self, event):
reply=QMessageBox.question\
(self,"信息",
"你确定要离开吗",
QMessageBox.Yes,QMessageBox.No)
if reply==QMessageBox.Yes:
event.accept()
else:
event.ignore()
def center(self):
screen=QDesktopWidget().screenGeometry()
size=self.geometry()
self.move((screen.width()-size.width())/2,
(screen.height()-size.height())/2)
myapp=QApplication(sys.argv)
mywidget=Mywidget()
mywidget.show()
sys.exit(myapp.exec_())
加上状态栏
import sys
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
"""
初始化UI界面
"""
self.resize(800, 600)
self.center()
self.setWindowTitle("myapp")
self.setWindowIcon(QIcon("E:\py_code\作业\第三次作业\mm.jpg"))
# 菜单栏
menu_control = self.menuBar().addMenu("Control")
act_quit = menu_control.addAction("quit")
act_quit.triggered.connect(self.close) # 待定
menu_help = self.menuBar().addMenu("Help")
act_about = menu_help.addAction("adout...")
act_about.triggered.connect(self.about)
act_aboutqt = menu_help.addAction("aboutqt")
act_aboutqt.triggered.connect(self.aboutqt)
# 状态栏
self.statusBar().showMessage("程序已经就绪")
self.show()
def about(self):
QMessageBox.about(self, "about this software", "wise system")
def aboutqt(self):
QMessageBox.about(self)
def center(self):
"""
设置居中
:return:None
"""
screen = QDesktopWidget().screenGeometry()
size = self.geometry()
self.move((screen.width() - size.width()) / 2,
(screen.height() - size.height()) / 2)
def colseEvent(self, event):
"""
重新定义closeEvent
:return: None
"""
reply = QMessageBox.question(self, "信息",
"确定退出吗",
QMessageBox.Yes, QMessageBox.No)
if reply == QMessageBox.Yes:
event.accept()
else:
event.ignore()
myapp = QApplication(sys.argv)
mainwindow = MainWindow()
mainwindow.show()
sys.exit(myapp.exec_())
author:specyue@mail.ustc.edu.cn 欢迎交流