Py3+PyQt5+Eric6:学习记录之第一天:点击按钮获取文本框的值并输出。
一、使用qt designer拖拽界面。
使用qtdesigner拖拽界面:
如图左侧导航栏,1:Sources,2:Forms,3:Resouces
1:代码,2:Qt Designer的拖拽界面的代码,xml形式的 3:暂未使用,猜测用来放置一些图片、音频、视频之类的。
在2:Forms中右键点击,然后选择new form,选择 类型:Dialog然后会启动Qt Designer,拖拽出如图的界面。
二、在qt designer中 自定义信号/槽
在Qt Designer的界面中
1:编辑窗口组件,2:编辑信号/槽
点击2,(注:初次操作生成界面时,自定义编辑信号/槽的步骤请跳过,否则界面无法生成对应的py代码。)
点击编辑后
图中灰色的全是组件默认就有的槽,黑色的是自己定义的,自定义get_text()后。
在配置连接的弹框中选择左侧的clicked()与右侧的get_text()然后点击OK。
在右下角的位置将可以看见多出一行,如图:
然后保存Qt Designer的界面,关闭不关闭皆可。
注:在生成Qt Designer界面对应的py代码前一定不要写自定义的信号/槽,否则会无法生成界面对应的py代码的。
三、生成py代码并显示界面。
回到Eric6中的Forms,右击刚才创建的form
点击1,Compile form然后可以看到
然后就在Source下可以看到多出一个文件:Ui_main.py
然后再回到Forms下右击main.ui选择Generate Dialog Code...
点击New...
注:Classname和Filename全是自动生成,算是默认值吧,点击OK。
继续点击OK,会在Sources中发现多了个main.py文件。
双击main.py
注意双下划线出的 .Ui_main的"."要去掉。
然后点击F2
是不是和想要的界面没出现,感觉不爽?
呵呵,没事,因为上边的代码不会自动执行所以什么都没出来。
在最下边加入如下代码
1 2 3 4 5 6 7 8 | if __name__ = = '__main__' : import sys from PyQt5.QtWidgets import QApplication app = QApplication(sys.argv) window = Dialog() ### Dialog是main.py的上部的Class的名字 window.show() sys.exit(app.exec_()) |
注意,这些代码不用被包在class里边了。
再点击F2,就可以看见想要的界面了。
看见想要的界面出来了,小开心有木有。
四、实现自定义的信号/槽中的槽。
如果在生成Qt designer的界面的py代码前自定义了信号/槽,则会在Generate Dialog Code...时提示error,其中get_text()是自定义的槽。
如果生成界面的py代码前自定义了信号/槽,并在Generate Dialog Code...时提示如图的error,回到Qt Designer中的右下角
删除掉信号/槽的绑定就行。然后继续执行步骤3。
执行步骤2,绑定信号/槽,绑定按钮的点击事件到主框的自定义的函数:get_text()。
在main.py的class Dialog中增加自定义函数
1 2 3 | def get_text( self ): print ( 'get_text' ) print ( self .textEdit.toPlainText()) ##获取文本的内容。。。该函数也是百度查的,菜鸟一枚,大家理解哈。 |
再次执行步骤2,仍会提示没有get_text属性,忽略它就好继续执行,此时界面对应的py代码类已经存在了,不需要再次new了,直接生成就好。
F2执行main.py代码,点击绑定信号/槽的那个按钮
点击按钮后打印文本框的内容,小开心有木有。
五、个人理解:
上代码,全部的main.py的代码也是自动生成就下边几行代码是自己手动添加的、出处也是网上查的,Qt Designer界面自动生成的代码就不上了,如下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | # -*- coding: utf-8 -*- """ Module implementing Dialog. """ from PyQt5.QtCore import pyqtSlot from PyQt5.QtWidgets import QDialog from Ui_main import Ui_Dialog class Dialog(QDialog, Ui_Dialog): """ Class documentation goes here. """ def __init__( self , parent = None ): """ Constructor @param parent reference to the parent widget (QWidget) """ super (Dialog, self ).__init__(parent) self .setupUi( self ) ## 调用Qt Designer界面生成的代码的布局函数,同时将自身以参数的形式传递过去,然后就可以调用本类Dialog的函数。 def get_text( self ): print ( 'get_text' ) print ( self .textEdit.toPlainText()) ##可以直接调用父类的属性,这个不错,以后信号/槽 神马的全都写到单独的类中,然后继承界面的类,不错不错。 if __name__ = = '__main__' : import sys from PyQt5.QtWidgets import QApplication app = QApplication(sys.argv) window = Dialog() ## 类名,注意要和自己定义的类名一致。 window.show() sys.exit(app.exec_()) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架