我们接下来的讨论,会基於读者已经先读过我 day5 文章 的架构下去进行程序设计
如果还不清楚我程序设计的逻辑 (UI.py、controller.py、start.py 分别在干麻)
建议先阅读 day5 文章後再来阅读此文。
https://www.wongwonggoods.com/python/pyqt5-5/
https://github.com/howarder3/ironman2021_PyQt5_photoshop/tree/main/day07_input_button
一样先打开我们的 Qt designer,
这篇我们要介绍的是 QPushButton,
作为我们第一个「input」用的功能。
这边讲的「input」,是广义的「input」,也就是任何输入进我们程序的讯号,
反之,「output」,就是指任何从我们程序输出的讯号
我们在 Buttons 中找到 Push Button,
拖曳至视窗自己喜欢的地方,就完成今天的设计罗!
一样,我们可以修改物件的名称,使我们在未来更容易是哪一个功能。
一样的编译指令,我们加上 -x (也可不加),
我们就可以先检视看看转换後的视窗是不是跟我们想像的一样。
pyuic5 -x day7.ui -o UI.py
一样,这程序只有介面 (视觉上的呈现),没有任何互动功能
python UI.py
看起来符合我们的想像就没问题了。
接下来,我们必须先研究一下我们刚刚的程序,
把我们刚刚程序中的「物件名称」找出来。
名称也可以自己在设计 Qt desginer 时设定,可以看上一个 part 我有框起来的部份。
如果读者使用的是预设的名称,应该会在刚转换完成的 UI.py 中 找到以下这段,
我们发现我们刚刚的 Push Button 名称为 pushButton,
(注意大小写,这可能导致程序错误。
)
当然,这绝对不是一个好名称,不过这边作为示范,我们就不多做改动。
还记得我们在 day5 中的模板吗?这边我们直接复制过来使用并修改。
from PyQt5 import QtWidgets, QtGui, QtCore
from UI import Ui_MainWindow
class MainWindow_controller(QtWidgets.QMainWindow):
def __init__(self):
super().__init__() # in python3, super(Class, self).xxx = super().xxx
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.setup_control()
def setup_control(self):
# TODO
# qpushbutton doc: https://doc.qt.io/qt-5/qpushbutton.html
self.ui.pushButton.setText('Print message!')
self.clicked_counter = 0
self.ui.pushButton.clicked.connect(self.buttonClicked)
def buttonClicked(self):
self.clicked_counter += 1
print(f"You clicked {self.clicked_counter} times.")
我们在新增或修改了 setup_control(), buttonClicked() 这两个部份
[重要]
self.ui.pushButton.clicked.connect(self.buttonClicked),连结 self.buttonClicked() 这个 function,使当按钮被按下时,能够执行 function 里面的功能。这里我们要定义的是按钮被按下时,会执行的事件内容,
这里作为示范,我们写的很简单,
用 self.clicked_counter += 1,更新点击的次数,
并用 print(f"You clicked {self.clicked_counter} times."),
在 terminal 上印出现在点击的次数。
照我们 day5 的程序架构,我们执行
python start.py
结果会是,当我们每按一次按钮,
terminal 就会多显示一行,并告诉我们现在点击的次数。
★ 本文也同步发於我的个人网站(会有内容目录与显示各个小节,阅读起来更流畅):【PyQt5】Day 7 - 我们的第一个 input 手段 - QPushButton
<<: Day 7: 人工智慧在音乐领域的应用 (有趣的AI演算法一)
>>: Day 10 - JavaScript(1) : 变数与资料类型
今天要解的题目和昨天有关联 是他进阶的2.0 没错,又是爱尔兰人 Irish-Name-Repo 2...
可能是题目订的太大,感觉会做不完啊 剩下8天 差不多该开始前端的部分了 好,开始玩React nod...
只要有接触怀旧电玩、一般来说不外乎就是三条路线。 使用模拟器、成本低、效果好、这应该是大多数人的选择...
Day 24 - 设定开发帐号 HBuilder X - DCloud 注册 HBuilder X ...
以爲把技术打完就没事了 殊不知旁边一堆人该该叫我在虎头蛇尾 (不是吧,像我这种技术写好写满的,没有废...