我们在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主程序)


然后向Form中拖入一个“Push Button”和一个“Text Edit”

2.2 指定点击事件及其响应函数
在工具栏点击信号-槽编缉按钮----光标移动到“PushButton”按钮上----鼠标左键点击“PushButton”不要松开–拖动光标到Form的任一位置后再松开鼠标左键

经过上边的操作就出现了如下界面,“pushButton”侧选中“click()”,“Form”侧点击“Edit”

在上边“Slots”点击绿色“+”按钮,指定click事件的响应函数,名称随意定比如我这里命名为“pushButton_click()”
(我们这里只是指定事件与响应函数的关联关系,函数是还没实现的,后边我们自行实现)


这样界面设计和事件关联就完成了,我们下来选择保存,将文件保存到项目的根目录下

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

关闭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.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_Formclass MyPyQT_Form(QtWidgets.QWidget,Ui_Form):def __init__(self):super(MyPyQT_Form,self).__init__()self.setupUi(self)#实现pushButton_click()函数,textEdit是我们放上去的文本框的iddef 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 += 10self.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是我们放上去的文本框的iddef 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, QtWidgetsclass 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.translateForm.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

QT Desinger设计程序主界面 PyUIC生成.py相关推荐

  1. QT设计器主界面中文介绍

    在Qt程序开发过程中,除可以通过手动写代码实现软件开发功能外,还可以通过Qt的GUI界面设计器(Qt Designer)进行界面的绘制和布局.该工具提供了Qt的基本可绘制窗口部件,如QWidget.Q ...

  2. 嵌入式系统开发笔记80:应用Qt Designer进行主界面设计

    前言   本篇文章讲解PyQt的基本使用方法,我们将应用Qt Designer来设计一个主界面,学习完本篇文章的内容后,你将获得如下技能.   (1)在VS Code中启动Qt Designer    ...

  3. Qt工作笔记-主界面往模式对话框emit信号,有注意的问题

    今天遇到个坑,往主界面往模式对话框emit信号. 应为模式对话框exec后,主界面就不响应了,emit也发不了.所以要先emit,再exec. 运行截图如下: 正常情况下: 此时,相关代码如下: vo ...

  4. Qt编写通用主界面V2019

    其实是2018年做出来的这个界面效果,用该界面做了三四个项目,今天抽空特意提取出来单独的demo,集成到了皮肤生成器中. 转载于:https://my.oschina.net/feiyangqingy ...

  5. Qt工作笔记-主界面传输数据到附属界面(通过信号与槽非构造函数)

    通过信号与槽非构造函数, 运行截图如下: 文件结构如下: 代码如下: widget.h #ifndef WIDGET_H #define WIDGET_H #include <QWidget&g ...

  6. Qt之实现360安全卫士主界面

    Qt之实现360安全卫士主界面(一) 该博文只是模仿360安全卫士的主界面,并不牵涉其中的任何业务功能:重在个人见解以及界面实现:关于360安全卫士的主界面,我想大家都见到过,毕竟基本大部分人都安装过 ...

  7. Qt之实现360安全卫士主界面(一)

    转自:http://www.cnblogs.com/appsucc/archive/2012/03/14/2395657.html 该博文只是模仿360安全卫士的主界面,并不牵涉其中的任何业务功能:重 ...

  8. Qt之实现360安全卫士主界面(转)

    Qt之实现360安全卫士主界面(一) 该博文只是模仿360安全卫士的主界面,并不牵涉其中的任何业务功能:重在个人见解以及界面实现:关于360安全卫士的主界面,我想大家都见到过,毕竟基本大部分人都安装过 ...

  9. python登陆成功页面跳转_Python QT由登陆界面到主界面

    在使用Python QT开发界面的时候,会出现从登陆界面到主界面的一个切换问题.如下所示,用户输入用户名和密码后,如果用户名和密码匹配,则会跳转到主界面,此时登陆界面消失. 首先需要定义自己需要的对话 ...

最新文章

  1. 实验四 主存空间的分配和回收
  2. CSS 单行溢出文本只显示部分内容
  3. visual studio安装python插件_Visual Studio 2012 Ultimate 上安装 Python 开发插件 PTVS
  4. (第二篇)Vue计算属性、侦听器、过滤器
  5. SpringMVC-自定义转换器
  6. 【jQuery】在表单提交前触发事件(数据校验/执行计算等)
  7. 获取两个数的最大值,判断是否相等;
  8. 基于Java+SpringBoot+vue+element实现物流管理系统
  9. openstack 安装windows系统
  10. 信源压缩编码 编程c语言,霍夫曼信源编码实验报告.docx
  11. 比特币可视化工具_这个比特币交易“可视化”网站,用一辆公交车带你“上车”...
  12. UVA213 UVALive5152 Message Decoding
  13. 前端和java选哪个_web前端和java哪个好?新手该选择哪个
  14. 中国科学院大学数学院本科生教材
  15. 非线性动力学_利用非线性动力学系统研究混沌现象
  16. 在本地计算机无法启动uGs,SIEMENS_NX 免安装版
  17. excel 小技巧选某些列的时候总是选到后面的空的部分解决方法
  18. HNOI2014 世界树 基于虚树的树形动态规划
  19. 【JavaScript打印100,1000,10000 ......内的素数】自动打印素数
  20. 如何判断一家公司是否靠谱

热门文章

  1. 五款最佳VMware vSphere免费管理工具
  2. springBoot+itext处理富文本转pdf
  3. 等保三级核心-应用安全
  4. CSS首字母下沉怎么设置?
  5. CDN 加速 OSS 常见问题及处理思路
  6. 养生怪杰:魏伟的养生之道
  7. reference other engineer's code to explain wheather linux terminal can display matplotlib' figure
  8. 山东开票系统服务器地址是什么,山东省增值税发票综合服务平台网址
  9. Dell服务器型号的详解
  10. 精选(26)面试官:讲讲你对ThreadLocal的理解