赞
踩
我们在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=
2.1 设计界面
在PyCharm中创建一个项目,然后点击“Tools”–“External Tools”–“QTDesinger”打开QT Desinger(注意:先创建工具,然后再创建自己想要的main.py主程序)
然后向Form中拖入一个“Push Button”和一个“Text Edit”
2.2 指定点击事件及其响应函数
在工具栏点击信号-槽编缉按钮----光标移动到“PushButton”按钮上----鼠标左键点击“PushButton”不要松开–拖动光标到Form的任一位置后再松开鼠标左键
经过上边的操作就出现了如下界面,“pushButton”侧选中“click()”,“Form”侧点击“Edit”
在上边“Slots”点击绿色“+”按钮,指定click事件的响应函数,名称随意定比如我这里命名为“pushButton_click()”
(我们这里只是指定事件与响应函数的关联关系,函数是还没实现的,后边我们自行实现)
这样界面设计和事件关联就完成了,我们下来选择保存,将文件保存到项目的根目录下
关闭QT Designer回到PyCharm,查看项目,可以看到只有刚才保存的PyQT_Form.ui文件而且该文件在PyCharm是打不开的
我们需要将这个文件转成.py代码才能使用
选中“PyQT_Form”,在其上点击鼠标右键,到“External Tools”中点击“PyUIC”
完后再看项目文件,就可以看到多了一个“PyQT_Form.py”,双击查看其内容如下:
应该来说我们只要在上边的“PyQT_Form.py
”中,将需要的包导入—添加pushButton_click()
函数实现代码----实例化Ui_Form
类,实现这三步程序应该就差不多了
但是PyQT_Form.py
是PyUIC
文件按照“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 运行演示
右键选择运行
运行界面如下
点击“PushButton”后界面如下
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()
#设置内容
效果图:
主函数:
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。