QT Desinger设计程序主界面 PyUIC生成.py

我们在PyCharm安装配置Qt Designer+PyUIC教程中已配置好了PyCharm+QTDesigner+PyUIC环境

这里在此基上我们演示如何使用这些工具,编写一个图形界面程序:

程序主界面上有一个按钮和一个编缉框,点击按钮就在编缉框中显示“你点击了按钮”
注意pyqt-qt designer汉化:
https://pan.baidu.com/s/11Rm48j3Q_76mdMkAQw2F5w?errno=0&errmsg=Auth%20Login%20Sucess&&bduss=&ssnerror=0&traceid=

二、使用QT Desinger设计程序主界面

2.1 设计界面
在PyCharm中创建一个项目,然后点击“Tools”–“External Tools”–“QTDesinger”打开QT Desinger(注意:先创建工具,然后再创建自己想要的main.py主程序)
QT Desinger设计程序主界面 PyUIC生成.py_第1张图片
QT Desinger设计程序主界面 PyUIC生成.py_第2张图片
然后向Form中拖入一个“Push Button”和一个“Text Edit”
QT Desinger设计程序主界面 PyUIC生成.py_第3张图片
2.2 指定点击事件及其响应函数
在工具栏点击信号-槽编缉按钮----光标移动到“PushButton”按钮上----鼠标左键点击“PushButton”不要松开–拖动光标到Form的任一位置后再松开鼠标左键
QT Desinger设计程序主界面 PyUIC生成.py_第4张图片
经过上边的操作就出现了如下界面,“pushButton”侧选中“click()”,“Form”侧点击“Edit”
QT Desinger设计程序主界面 PyUIC生成.py_第5张图片
在上边“Slots”点击绿色“+”按钮,指定click事件的响应函数,名称随意定比如我这里命名为“pushButton_click()”
(我们这里只是指定事件与响应函数的关联关系,函数是还没实现的,后边我们自行实现)
QT Desinger设计程序主界面 PyUIC生成.py_第6张图片
QT Desinger设计程序主界面 PyUIC生成.py_第7张图片
这样界面设计和事件关联就完成了,我们下来选择保存,将文件保存到项目的根目录下
QT Desinger设计程序主界面 PyUIC生成.py_第8张图片

二、使用PyUIC将文件转成python代码

关闭QT Designer回到PyCharm,查看项目,可以看到只有刚才保存的PyQT_Form.ui文件而且该文件在PyCharm是打不开的

我们需要将这个文件转成.py代码才能使用
QT Desinger设计程序主界面 PyUIC生成.py_第9张图片
选中“PyQT_Form”,在其上点击鼠标右键,到“External Tools”中点击“PyUIC”
QT Desinger设计程序主界面 PyUIC生成.py_第10张图片
完后再看项目文件,就可以看到多了一个“PyQT_Form.py”,双击查看其内容如下:
QT Desinger设计程序主界面 PyUIC生成.py_第11张图片

三、实现程序

应该来说我们只要在上边的“PyQT_Form.py”中,将需要的包导入—添加pushButton_click()函数实现代码----实例化Ui_Form类,实现这三步程序应该就差不多了

但是PyQT_Form.pyPyUIC文件按照“PyQT_Form.ui”生成的,如果我们需要去调整PyQT_Form.ui(比如调整按钮位置调整文本框大小,后续调整界面在实际编程中基本是必然需求)

调整完后重新生成PyQT_Form.py时,PyUIC可不会管当前我们已经在PyQT_Form.py中写了什么代码,旧PyQT_Form.py会直接被新PyQT_Form.py覆盖

也就是说,所有逻辑代码我们都不应当写入PyQT_Form.py文件(或者叫不要动PyQT_Form.py文件),我们新建一个文件在里边创建一个子类(MyPyQT_Form)继承PyQT_Form.py中的Ui_Form

3.1 实现代码
在项目中新建一个.py文件,写入如下代码

import sys
from PyQt5 import QtWidgets
from PyQT_Form import Ui_Form

class MyPyQT_Form(QtWidgets.QWidget,Ui_Form):
    def __init__(self):
        super(MyPyQT_Form,self).__init__()
        self.setupUi(self)

    #实现pushButton_click()函数,textEdit是我们放上去的文本框的id
    def pushButton_click(self):
        self.textEdit.setText("你点击了按钮")


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    my_pyqt_form = MyPyQT_Form()
    my_pyqt_form.show()
    sys.exit(app.exec_())

3.2 运行演示
右键选择运行
QT Desinger设计程序主界面 PyUIC生成.py_第12张图片
运行界面如下
QT Desinger设计程序主界面 PyUIC生成.py_第13张图片
点击“PushButton”后界面如下
QT Desinger设计程序主界面 PyUIC生成.py_第14张图片

QtGui.QComboBox控件常用函数:

.addItem(string)
#添加字符串项到Item
.addItems(list)
#添加列表或元组元素到Item
.clear()
#清除所有Item
.clearEditText()
#清除编辑框内容
.count()
#返回Item数目
.currentIndex()
#返回当前选择索引,从0开始
.currentText()
#返回当前选择内容
.insertItem(index,string)
#插入字符串项到Item项index后
.insertItems(index,list)
#插入列表或元组元素到Item项index后
.insertSeparator(index)
#插入分隔符到Item项index后
.itemText(index)
#返回Item项index的内容
.removeItem(index)
#删除Item项index
.setCurrentIndex(index)
#设置Item项index为当前选择
.setEditable(True)
#设置选框可编辑
.setEditText(string)
#设置编辑框内容
.setItemText(index,string)
#设置Item项index内容为字符串值

QtGui.QLineEdit控件常用函数:

.backspace()#模拟backspace退格键
.clear()
#清除输入框内容
.cursorPosition()
#返回输入框光标位置,从0开始
.setEchoMode(EchoMode)
#设置输入框显示格式
#0--Normal,1--NoEcho,2--Password,3--PasswordEchoOnEdit
.setPlaceholderText(string)
#设置输入框浮显文字
.setReadOnly(True)
#设置输入框只读
.setText(string)
#设置输入框内容
.text()
#返回输入框内容

QtGui.QSpinBox控件常用函数:

.setMaximum(max)
#设置最大值
.setMinimum(min)
#设置最小值
.setRange(min,max)
#设置范围
.setSingleStep(step)
#设置步长
.setValue(num)
#设置输入框当前值
.value()
#返回输入框当前值
QtGui.QLabel控件常用函数:
 
.clear()
#清除标签内容
.setPixmap(QtGui.QPixmap(path))
#设置标签内容图片
.setText(string)
#设置标签内容文字
.text()
#返回标签内容

QtGui.QListWidget控件常用函数:

.addItem(string)
#添加字符串项到Item
.addItems(list)
#添加列表或元组元素到Item
.clear()
#清除所有Item
.count()
#返回Item数目
.currentItem()
#返回当前选择Item类,没选返回None
.currentRow()
#返回当前选择索引行,从0开始,没选返回-1
.insertItem(row,string)
#插入字符串项到Item项row行后
.insertItems(row,list)
#插入列表或元组元素到Item项row行后
.item(row)
#返回Item项row行的Item类
.setCurrentItem(item)
#设置Item项item为当前选择
.setCurrentRow(row)
#设置Item项row行为当前选择
Item类方法:
.text()
#返回内容
.setText()
#设置内容

我的练习:绘制动态曲线

效果图:
QT Desinger设计程序主界面 PyUIC生成.py_第15张图片
主函数:
import sys
from PyQt5 import QtWidgets
from PyQT_Form import Ui_Form
import pyqtgraph as pg
import numpy as np
from PyQt5.QtWidgets import QWidget,QApplication,QFrame,QGridLayout,QLabel,QPushButton,QVBoxLayout
from PyQt5.QtCore import Qt,QTimer

def shuchu():
    my_pyqt_form.textEdit.setText("11111111")
    print(my_pyqt_form.lineEdit.text())

class MyPyQT_Form(QtWidgets.QWidget,Ui_Form):
    def __init__(self):
        super(MyPyQT_Form,self).__init__()
        self.setupUi(self)
        self.generate_image()

    def generate_image(self):
        # verticalLayout = QVBoxLayout(self.frame)
        win = pg.GraphicsLayoutWidget(self.frame)
        self.verticalLayout.addWidget(win)
        p = win.addPlot(title="动态波形图")
        p.showGrid(x=True, y=True)
        p.setLabel(axis="left", text="Amplitude / V")
        p.setLabel(axis="bottom", text="t / s")
        p.setTitle("y1 = sin(x)  y2 = cos(x)")
        p.addLegend()

        self.curve1 = p.plot(pen="r", name="y1")
        self.curve2 = p.plot(pen="g", name="y2")

        self.Fs = 1024.0  # 采样频率
        self.N = 1024  # 采样点数
        self.f0 = 4.0  # 信号频率
        self.pha = 0  # 初始相位
        self.t = np.arange(self.N) / self.Fs  # 时间向量 1*1024的矩阵

        qqqq = win.addPlot(title="动态波形图")
        qqqq.showGrid(x=True, y=True)
        qqqq.setLabel(axis="left", text="Amplitude / V")
        qqqq.setLabel(axis="bottom", text="t / s")
        qqqq.setTitle("y1 = sin(x)  y2 = cos(x)")
        qqqq.addLegend()

        self.curve3 = qqqq.plot(pen="r", name="y1")
        self.curve4 = qqqq.plot(pen="g", name="y2")


        self.Fs1 = 1024.0  # 采样频率
        self.N1 = 1024  # 采样点数
        self.f01 = 4.0  # 信号频率
        self.pha1 = 0  # 初始相位
        self.t1 = np.arange(self.N1) / self.Fs1  # 时间向量 1*1024的矩阵

    def plotData(self):
        self.pha1 += 10
        self.curve1.setData(self.t1, np.sin(8 * np.pi * self.t1 + self.pha1 * np.pi / 180.0))
        self.curve2.setData(self.t1, np.cos(8 * np.pi * self.t1 + self.pha1 * np.pi / 180.0))
        self.curve3.setData(self.t1, np.sin(8 * np.pi * self.t1 + self.pha1 * np.pi / 180.0))
        self.curve4.setData(self.t1, np.cos(8 * np.pi * self.t1 + self.pha1 * np.pi / 180.0))

    def closess(self):
        self.curve3.clear()


    # 实现pushButton_click()函数,textEdit是我们放上去的文本框的id
    def slot1(self):
        self.textEdit.setText("你点击了按钮")
        self.textEdit.setText("nishul")

        timer = QTimer(self)
        timer.timeout.connect(self.plotData)
        timer.start(100)



if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    my_pyqt_form = MyPyQT_Form()

    my_pyqt_form.show()
    sys.exit(app.exec_())

ui函数

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

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

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(1113, 485)
        self.frame = QtWidgets.QFrame(Form)
        self.frame.setGeometry(QtCore.QRect(420, 10, 671, 461))
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.verticalLayoutWidget = QtWidgets.QWidget(self.frame)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(10, 10, 651, 191))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(180, 20, 81, 41))
        self.pushButton.setObjectName("pushButton")
        self.textEdit = QtWidgets.QTextEdit(Form)
        self.textEdit.setGeometry(QtCore.QRect(140, 90, 104, 71))
        self.textEdit.setObjectName("textEdit")

        self.retranslateUi(Form)
        self.pushButton.clicked.connect(Form.slot1)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "豫北LKA实车报文读取"))
        self.pushButton.setText(_translate("Form", "PushButton"))

基础知识的普及:https://www.jianshu.com/p/afb1a778d232
官方学习网站(中文):https://maicss.gitbooks.io/pyqt5/content/
实战操作网站:https://www.cnblogs.com/XJT2018/category/1356673.html

多谢前辈提出思路:https://www.cnblogs.com/lsdb/p/9122425.html

你可能感兴趣的:(pyqt杂谈)