【没钱买ps,PyQt自己写】Day 7 – 我们的第一个 input 手段 - QPushButton

看完这篇文章你会得到的成果图

前言

我们接下来的讨论,会基於读者已经先读过我 day5 文章 的架构下去进行程序设计
如果还不清楚我程序设计的逻辑 (UI.py、controller.py、start.py 分别在干麻)
建议先阅读 day5 文章後再来阅读此文。

https://www.wongwonggoods.com/python/pyqt5-5/

此篇文章的范例程序码 github

https://github.com/howarder3/ironman2021_PyQt5_photoshop/tree/main/day07_input_button

UI 设计部份 (UI.py)

Qt designer 部份

一样先打开我们的 Qt designer,
这篇我们要介绍的是 QPushButton,
作为我们第一个「input」用的功能。

这边讲的「input」,是广义的「input」,也就是任何输入进我们程序的讯号,
反之,「output」,就是指任何从我们程序输出的讯号

我们在 Buttons 中找到 Push Button,
拖曳至视窗自己喜欢的地方,就完成今天的设计罗!

一样,我们可以修改物件的名称,使我们在未来更容易是哪一个功能。

转换成 UI.py

一样的编译指令,我们加上 -x (也可不加),
我们就可以先检视看看转换後的视窗是不是跟我们想像的一样。

转换 day7.ui -> UI.py

pyuic5 -x day7.ui -o UI.py

执行看看 UI.py 画面是否如同我们想像

一样,这程序只有介面 (视觉上的呈现),没有任何互动功能

  • 看看我们制作出来的介面
python UI.py

看起来符合我们的想像就没问题了。

controller 设计部份 (controller.py)

接下来,我们必须先研究一下我们刚刚的程序,
把我们刚刚程序中的「物件名称」找出来。

名称也可以自己在设计 Qt desginer 时设定,可以看上一个 part 我有框起来的部份。

从 UI.py 中找出物件名称

如果读者使用的是预设的名称,应该会在刚转换完成的 UI.py 中 找到以下这段,

我们发现我们刚刚的 Push Button 名称为 pushButton,
(注意大小写,这可能导致程序错误。)
当然,这绝对不是一个好名称,不过这边作为示范,我们就不多做改动。

取得名称後,去修改 controller.py

还记得我们在 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() 这两个部份

在 setup_control() 中

  • self.ui.pushButton.setText('Print message!'):将按钮修改为 "Print message!"
  • self.clicked_counter = 0,设定一个储存我们现在按了按钮几次的变数
  • [重要] self.ui.pushButton.clicked.connect(self.buttonClicked),连结 self.buttonClicked() 这个 function,使当按钮被按下时,能够执行 function 里面的功能。

在 buttonClicked() 中

这里我们要定义的是按钮被按下时,会执行的事件内容,
这里作为示范,我们写的很简单,
用 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) : 变数与资料类型

[Day 27] Web 小迷茫

今天要解的题目和昨天有关联 是他进阶的2.0 没错,又是爱尔兰人 Irish-Name-Repo 2...

[Day 22] - React 环境建置

可能是题目订的太大,感觉会做不完啊 剩下8天 差不多该开始前端的部分了 好,开始玩React nod...

Day-6 老玩家在新电视的怀旧神器、FrameMeister XRGB-mini

只要有接触怀旧电玩、一般来说不外乎就是三条路线。 使用模拟器、成本低、效果好、这应该是大多数人的选择...

Day 24 - 设定开发帐号 HBuilder X - DCloud 注册

Day 24 - 设定开发帐号 HBuilder X - DCloud 注册 HBuilder X ...

码农最後的微检讨,拖了整整十天的完赛心得

以爲把技术打完就没事了 殊不知旁边一堆人该该叫我在虎头蛇尾 (不是吧,像我这种技术写好写满的,没有废...