qt designer + pyqt5 开发UI小程序

2019年5月15日 Jerry 10280 2019年7月13日

       之前用了下tkinter 进行python的界面程序开发,但是感觉太挫了。没法直观的设计界面,于是又盯上了qt,并且可以使用qt designer 直观拖拽控件进行设计。

       使用pyqt直接输入以下命令安装即可:

pip3 install pyqt5

        接下来我们举个小栗子,开发一个简单的txt文本读取程序。主要开发步骤如下:

一、使用qt designer 设计程序界面

       打开qt designer后,创建main window,并拖拽控件如下,可以按 ctrl+R 预览:

界面ok后,接下来给按钮添加事件名称。比如上面这个,我要点击按钮就执行一个叫作 upload() 的函数,你需要这样做:

1、按一下F4 或者 点击如下按钮,进入信号编辑

2、鼠标放在按钮上点击拖拽至mainwindow

3、选择事件 click() ,并点击edit 添加自定义的事件

 

点击加号后添加自定义的函数名称:

最终将两个事件关联即可,界面会如下呈现:

最后,设计好自己想要的界面后保存文件,这里我保存到了 jerry.ui 文件。

二、转化ui为py文件

        保存的ui文件需要一个简单的命令,将其转化为py文件,这样我们就可以简单运行出这个界面。

pyuic5 -o layout.py jerry.ui

-o 之后加的是生成文件的名称,最后一个参数是保存的ui文件名

最后生成的layout.py完整代码如下:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'jerry.ui'
#
# Created by: PyQt5 UI code generator 5.12.2
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(640, 480)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(40, 80, 141, 61))
        self.pushButton.setObjectName("pushButton")
        self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
        self.groupBox.setGeometry(QtCore.QRect(220, 30, 391, 281))
        self.groupBox.setObjectName("groupBox")
        self.plainTextEdit = QtWidgets.QPlainTextEdit(self.groupBox)
        self.plainTextEdit.setGeometry(QtCore.QRect(20, 30, 351, 211))
        self.plainTextEdit.setObjectName("plainTextEdit")
        self.groupBox.raise_()
        self.pushButton.raise_()
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 640, 18))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        self.pushButton.clicked.connect(MainWindow.upload)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "打开TXT文本文件"))
        self.groupBox.setTitle(_translate("MainWindow", "读取的文本内容"))

三、引用 layout.py 显示界面:

        新建一个jerry.py文件,代码如下:

import sys
from layout import Ui_MainWindow
from PyQt5 import QtWidgets

class mywindow(QtWidgets.QMainWindow,Ui_MainWindow):
    def __init__(self):
        super(mywindow,self).__init__()
        self.setupUi(self)

    #自定义函数
    def upload(self):
        print('upload click')


app = QtWidgets.QApplication(sys.argv)
window = mywindow()
window.show()

sys.exit(app.exec_())

这样就完成了界面的实现,我们运行 python jerry.py 便可以得到如下界面:

并且,点击按钮,控制台也会出现“upload click” 的打印。

继续丰富upload()函数实现,即可实现点击选择文本文件并展示到文本框中,整个函数代码如下:

def upload(self):
    print('upload click')
    filename, filetype = QtWidgets.QFileDialog.getOpenFileName(self, '选择TXT', './', 'TXT (*.txt);')

    print(filetype, filename)

    #文件不为空则读取文件
    if filename:
        with open(filename,'r') as fp:
            text = fp.read()
            #先清空 后赋值
            self.plainTextEdit.setPlainText("")
            self.plainTextEdit.setPlainText(text)

'''
# plainTextEdit获得方式
self.plainTextEdit.toPlainText()

# plainTextEdit设置方式
self.plainTextEdit.setPlainText("...")

# 在原本内容基础上增加内容
self.plainTextEdit.appendPlainText("...")  
'''

最后的效果如下:

       关于qt的弹出窗口大全,看别人写的这个:点这里

       关于qt的文件对话框有下面几个方法:

选取文件夹 QFileDialog.getExistingDirectory()
选择文件 QFileDialog.getOpenFileName()
选择多个文件 QFileDialog.getOpenFileNames()
选择保存文件 QFileDialog.getSaveFileName()

       一个简单的小小入门,qt博主也在研究中,哪里不对的地方欢迎各位指出~!晚安

 


原创文章,转载请注明出处: https://jerrycoding.com/article/pyqt5-1

微信
jerry微信赞助
支付宝
jerry支付宝赞助

您尚未登录,暂时无法评论。请先 登录 或者 注册

0 人参与 | 0 条评论