前面说到python小工具的开发是一件非常有意思的事情。可以用PyQt5、PyQt5-tools的包来实现。但是后来了解到pyside2是python本家开发的包,以后的使用范围和生命周期会更加稳定和有保障,故比较推荐改用pyside2进行开发。之前用PyQt5来开发的同学不必紧张,目前两者只有导入包的区别。改变导入包,即可以轻松从PyQt5转战Pyside2。
因为pyside2是python自己开发的,未来的使用会更加广泛,可以通过安装pyside2代替PyQt5及PyQt5-tools
安装方法:pip install pyside2
使用pyside2的安装命令
pyinstaller stats2.py --noconsole --hidden-import PySide2.QtXml
为ui文件时,在入口py文件对ui文件动态加载的方法:
from PySide2.QtWidgetsimport QApplication, QMessageBox
from PySide2.QtUiToolsimport QUiLoader
from PySide2.QtCoreimport QFile
class Stats:
def __init__(self):
# 从文件中加载UI定义(固定写法)
qfile_stats = QFile("stats.ui") #如果不在入口文件目录,需要加上路径如ui/stats.ui
qfile_stats.open(QFile.ReadOnly)
qfile_stats.close()
# 从 UI 定义中动态 创建一个相应的窗口对象
# 注意:里面的控件对象也成为窗口对象的属性了
# 比如self.ui.button , self.ui.textEdit
self.ui = QUiLoader().load(qfile_stats)
self.ui.button.clicked.connect(self.handleCalc)
——————————————————————————————
中间是定义handleCalc行为自己发挥啊啊啊啊啊啊
——————————————————————————————
app = QApplication([])
stats = Stats()
stats.ui.show()
app.exec_()
将ui转换为py文件后需要加的内容
import sys #支持下面方法需要导入的包
中间自己写xxx
if __name__ =="__main__":
app = QtWidgets.QApplication(sys.argv)# 创建一个QApplication,也就是你要开发的软件app
MainWindow = QtWidgets.QMainWindow()# 创建一个QMainWindow,用来装载你需要的各种组件、控件
ui = Ui_Form()# ui是你创建的ui类的实例化对象
ui.setupUi(MainWindow)# 执行类中的setupUi方法,方法的参数是第二步中创建的QMainWindow
MainWindow.show()# 执行QMainWindow的show()方法,显示这个QMainWindow
sys.exit(app.exec_())# 使用exit()或者点击关闭按钮退出QApplication
pyside2打包方式
pyinstaller -F -w bindp.py 注:打出单独的exe文件,要用py文件,用ui文件的单独可执行文件打出后不可用
pyinstaller stats2.py --noconsole --hidden-import PySide2.QtXml 注:可用ui,打出的是带程序文件的文件夹
目前实践成功的代码包括以下:
1.mysql类文件:
#导入mysql包
import pymysql
#建立mysql连接
conndev = pymysql.connect(
host=" ",
port= ,
user=' ',
password=' ',
database=" ",
charset=" ",
#定义数据库操作方法
def do1(userId, thirdId, ev):
#给查询语句设置变量
sql =' '
#执行查询语句
try:
cursor.execute(sql)
conndev.commit()
conntest_vpgame.commit()
except:
conndev.rollback()
conntest_vpgame.rollback()
print(cursor.execute(sql))
#关闭数据库连接
cursor.close()# 关闭游标
conndev.close()# 关闭连接
conntest_vpgame.close()
2.ui类文件
使用Designer工具绘制ui,使用pyuic转换成py文件后,
#导入资源包
from PySide2.QtCoreimport (QCoreApplication, QMetaObject, QRect, Qt)
from PySide2.QtGuiimport (QFont)
from PySide2.QtWidgetsimport *
#创建类
class Ui_Form(QMainWindow):
def setupUi(self, Form):
if Form.objectName():
Form.setObjectName(u"Form")
Form.resize(848, 469)
self.label_1 = QLabel(Form)
中间为ui转换的代码行
中间为ui转换的代码行
中间为ui转换的代码行
中间为ui转换的代码行
中间为ui转换的代码行
如果有下拉列表等控件需要添加元素的,需要在转换代码后手动增加,并在以下结构中完善
def retranslateUi(self, Form):
Form.setWindowTitle(QCoreApplication.translate("Form", u"\u7405\u740a\u5c0f\u5de5\u5177\u4e4b\u7b2c\u4e09\u65b9\u64cd\u4f5c-yena", None))
最后增加各种按钮或点击时间的交互,如:
self.pushButton.clicked.connect(Form.currentdef)
3.方法类文件
#导入包
import sys
from bind1import Ui_Form
import MySqlData
from PySide2.QtWidgetsimport *
#创建类
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.ui = Ui_Form()
self.ui.setupUi(self)
中间是自己定义的其他方法,方法中可以调用mysql类的方法进行操作的执行如MySqlData.unbinddib(userId, ev)
中间是自己定义的其他方法
中间是自己定义的其他方法
中间是自己定义的其他方法
#代码结尾,唤起app且一直循环的获取窗口时间
if __name__=="__main__":
app = QApplication(sys.argv)
win = MainWindow()
win.show()
sys.exit(app.exec_())