创建第一个QT程序:
点击new project
项目名:test
保存位置:D:\eric6space\test
选yes。
选OK。
保存位置中自动生成如下文件
下面开始创建QT端的UI文件:
选择要生成的窗体对象,这里选什么都可以,后续进入到QT设计师中可以删除重新打开其他的类型
点击OK,选择保存位置,这里推荐新建文件夹,让UI代码和业务代码分开
刚才是选择路径,现在输入要起的文件名,点击保存
文件夹中生成新的UI文件:
并自动打开QT设计师:
在这里设计前端界面即可。
接下来做一个猜数小游戏:
选中Push Button 拖动到MainWindow中
双击PushButton,改显示内容(text),在右边属性编辑器中,对按钮属性赋值,这里我改了他的字体大小
然后我们增加一个Line Edit部件,并双击写下默认显示的文字,如下图:
前端大致已经做好了,接下来我们要把设计的界面生成对应代码,并自定义一下单击按钮后会产生的响应。转到eric6端,编译一下刚刚设计的Ui
编译之后自动生成Ui_开头的python文件,是UI设计直接转换成py代码,可以直接在eric6里运行
再生成业务端的初步代码:
点击New,输入类名和文件名,调整Path,为了独立性,path最好不要和刚刚编译产生UI代码放在一个文件夹,这里我们选择放在上一级文件里即可
点击OK后勾选给刚刚的按钮创建单击事件对应的函数。
OK之后,生成了第二个py文件,主要是用来写业务代码
在eric6中也可以看到对应的新文件
UI_开头的py文件是直接可以运行的,他是Qt设计师中设计的界面直接对应的代码,eric6帮我们生成了一个类,业务代码里的主函数中引入了这个类。
UiMainWindow.py继承了前者中的类,具体的逻辑代码是要在UIMainWindow.py中实现的。
接着需要编写代码,来实现业务逻辑。
由于自动生成的UiMainWindow.py,导入的包不全,我们需要自己手导一下需要用到的包。
注意删除自动生成的点,此点删除不影响程序运行,如果不删除,有时会报错。
由于我们UI代码业务代码分离,不在同一文件夹下,待会运行时以业务代码主函数所在地址为工作地址,所以我们在导UI代码时,需要加个前缀
此程序需要手动加入以下包
初始化函数新增代码:
完善按钮对应函数:
新增函数,关闭提示:
编写主函数:
主函数中,第一句和第三句是固定的,可以理解为启动和关闭。
第二句话实例化了上面编写的类,自动运行了其中的初始化函数。
业务python文件完整代码如下:
# -*- coding: utf-8 -*-
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QMainWindow
from PyQt5.QtWidgets import *
from UiCode.Ui_UiMainWindow import Ui_MainWindow
from random import randint
import sys
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUi(self)
self.num = randint(1,100)
self.show()
@pyqtSlot()
def on_pushButton_clicked(self):
guessnumber = int(self.lineEdit.text())
print(self.num)
if guessnumber > self.num:
QMessageBox.about(self, '看结果','猜大了!')
self.lineEdit.setFocus()
elif guessnumber < self.num:
QMessageBox.about(self, '看结果','猜小了!')
self.lineEdit.setFocus()
else:
QMessageBox.about(self, '看结果','答对了!进入下一轮!')
self.num = randint(1,100)
self.lineEdit.clear()
self.lineEdit.setFocus()
def closeEvent(self, event):
reply = QMessageBox.question(self, '确认', '确认退出吗', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
if reply == QMessageBox.Yes:
event.accept()
else:
event.ignore()
if __name__ == "__main__":
app = QApplication(sys.argv)
action = MainWindow()
sys.exit(app.exec_())
文件整体架构:
F2运行,工作路径随便选
关闭所有程序后,想要再次打开,只需要用eric6 open.epj文件即可
有时我们业务代码可能有好几个py文件,所以为了统筹,一般把主函数单独写在一个新的main里
用main引用业务代码即可,就能在main里运行程序了!