新建一个文件,导入我们设计的myDesigner.py文件,然后下面的代码相同即可。 但是这是在mian方法中调用窗口,也不符合我们的实际工作中的要求。 我们还可以这样搞:
默认的Qt Designer生成的代码是继承object类,所以默认编译生成的文件不能显示。
通过不同的方法,可以知道我们需要继承或重载QWidget这个类,来使用其中的show方法使窗口显示。
这也就是传说中的界面与代码分离,其实也没有想象中的那么难。
我们还可以通过同时继承QWidget和我们设计的Ui_Form类来简化代码,这就是传说中的多态?
之前我们见过,__init__是析构函数,也就是类被实例化(生成对象)之后默认加载的内容。
super().__init__()超级加载,也就是我们需要同时加载QWidget中的内容供我们使用。
self.setupUi(self) self是指自己,setupUi也就是Ui_Form中的方法。 还记得之前说的 :实例.方法(参数) self在实例是代表自己这个类 myshow 是实例,mydesignershow()是类,用=代表创建一个实例对象。 myshow.show() 然后调用对象中的方法,相当于调用类里面的函数。
PyQt5&python Gui入门教程(9)Qt Designer 初探信号槽
信号与槽作为QT 的核心机制,往往给新手带来很多困扰,这也不是一天两天能搞懂学透的东西,
我们的宗旨是要会用,就算是简单的运用吧,学以致用才是正道,也是沧桑啊!
先入一些信号槽的基本介绍:
信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性,也是 QT 区别于其它工具包的重要地方。它为高层次的事件处理自动生成所需要的附加代码。在我们所熟知的很多 GUI 工具包中,窗口小部件 (widget) 都有一个回调函数用于响应它们能触发的每个动作,这个回调函数通常是一个指向某个函数的指针。但是,在 QT 中信号和槽取代了这些凌乱的函数指针,使得我们编写这些通信程序更为简洁明了。
所有从 QObject 或其子类 ( 例如 Qwidget) 派生的类都能够包含信号和槽。当对象改变其状态时,信号就由该对象发射 (emit) 出去,这就是对象所要做的全部事情,它不知道另一端是谁在接收这个信号。这就是真正的信息封装,它确保对象被当作一个真正的软件组件来使用。槽用于接收信号,但它们是普通的对象成员函数。一个槽并不知道是否有任何信号与自己相连接。而且,对象并不了解具体的通信机制。
你可以将很多信号与单个的槽进行连接,也可以将单个的信号与很多的槽进行连接,甚至于将一个信号与另外一个信号相连接也是可能的,这时无论第一个信号什么时候发射系统都将立刻发射第二个信号。总之,信号与槽构造了一个强大的部件编程机制。
说实话对于像我这样的新手来说看着就蛋疼,想学会它没办法,我们还是简化一下概念吧:
所有QObject类都可以使用信号槽,换句话来说继承自pyqt中的类基本上都可以使用信号槽机制。当然非QObject也是可以通过其他一些办法来使用信号槽的。
仅仅有了信号和槽是不行的,我们还需要了解:
信号(Signal)、槽(slot)、连接(connect)、动作事件(action)、发射(emit)、发送者、接受者等等一些列的知识。
好吧,别搞的那么复杂行不行,我们还是学学该怎么用吧。
在Qt Designer中为我们提供了一些基本的信号槽方法,我们来看看:
点击工具栏上的“编辑信号/槽”,进入信号槽编辑模式,
我们可以直接在发送者(button)上按住不放拖动到接收者(Form窗体)上既可以建立连接。
然后会弹出信号槽的配置连接。
左边是发送者(按钮)的信号(动作事件),右边是接收者(窗体)的槽(动作事件)
我们看一下编译后生成的代码:
pushButton.clicked.connect(Form.close) 简单解释就是:当按钮点击之后关闭窗体。 实际却是:按钮.点击.链接(窗体.关闭)
其实应该是:按钮这个发送者,当按钮“点击”这个时间发生之后会发送一个信号出去,通过这段代码程序内部的通讯机制知道这个按钮的点击事情被连接到窗体的关闭事件上去了,然后通知接受者窗体,你该运行槽函数close了! 简单理解:比如我写了封信给你,送到邮局,邮局通过地址,转交给你。所以一个槽并不知道是否有任何信号与自己相连接。而且,对象并不了解具体的通信机制。
其实以上只是个人的浅显理解,具体的通信机制还是非常复杂的,想象一下邮局的工作就知道啦。
我们再来看看一些具体的代码:
self.pushButton.clicked.connect(Form.close) 按钮点击连接到窗口关闭
self.pushButton.clicked.connect(self.pushButton_2.hide) 按钮点击连接到按钮_2隐藏
self.pushButton.destroyed.connect(self.pushButton_2.close)