Python GUI教程(十):创建一个复杂的GUI

liftword2个月前 (02-16)技术文章20

本篇将会涉及:

  • 构建一个更加复制的GUI
  • 在选项卡部件中应用多个层级
  • 添加一个树部件和一个日历部件
  • 使用一个刻度盘部件来控制一个LCD显示器部件上的数字
  • 连接刻度盘部件和LCD部件到一个单选按钮上
  • 使用一个单选按钮来更新进度栏部件

延续上一篇的解耦思想,我们使用Qt设计师创建一个基本的包含各个部件的图形窗口,再在逻辑代码中对图形窗口进行调用和操作。

创建一个复杂的GUI

我们使用Qt设计师创建一个稍显复杂的GUI。其中包括:

  • 两个选项卡TabWidgets
  • 两个子选项卡TabWidgets
  • 一个日期部件DateEdit
  • 一个日历部件CalendarWidget
  • 一个树形部件TreeWidget
  • 一个组盒子GroupBox
  • 三个单选按钮RadioButton
  • 一个字体选择盒子FontComboBox
  • 一个Lable标签
  • 一个进度条progressBar
  • 一个刻度盘Dial
  • 一个LCD数据显示器LcdNumber

所有的步骤通过Qt设计师的拖拽就可以完成。

创建主选项卡

新建一个主窗口,拖拽TabWidget部件到主窗口中:

在选项卡1中创建一个子选项卡

继续使用TabWidget部件,在选项卡1中创建一个子选项卡:

在子选项卡1中添加一个树部件

我们继续使用TreeWidget部件,在刚刚创建的子选项卡1中创建一个树,并添加一些信息:

在子选项卡2中添加日期和日历部件

现在切换到子选项卡2中,我们使用DateEdit部件和CalendarWidget部件,在子选项卡2中添加一个日期修改框和一个日历框,采用垂直布局:

在选项卡2中添加按钮组

选项卡1已经构建好了,现在切换到选项卡2。

我们先使用GroupBox部件在创建一个组部件,然后在其中添加三个PushButton部件:

在选项卡2中添加刻度和LCD部件

我们再在选项卡2中添加一个刻度盘和LCD显示器,放置在一个组部件中:

在选项卡2中添加一个字体选择器

接着,使用FontComboBox部件和Label部件,在选项卡2中添加一个字体选择器和文本显示:

在选项卡2中添加一个进度栏

最后,我们使用ProcessBar部件在选项卡2中添加一个进度栏:

这样就完成了整个GUI的图形界面设计。

接下来,我们创建信号/槽来实现GUI的事件响应。

构建信号/槽

转换UI文件为Python文件

我们首先转换设计好的UI文件为Python文件,按照之前的解耦思想,将界面代码与逻辑代码分离。

转换UI文件后,新建一个Python文件,引入转换为Python代码的GUI窗口:

# coding:utf-8from PyQt5 import QtCore,QtWidgets,QtGuifrom GUI import complexif __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) MainWindow = QtWidgets.QMainWindow ui = complex.Ui_MainWindow ui.setupUi(MainWindow) MainWindow.show sys.exit(app.exec_)

运行一下,看是否正常:

新建一个逻辑类

为了便于操作,我们创建一个新类MainWindow,将程序的主循环放入其中,其余的逻辑功能以类的方法的方式添加:

# coding:utf-8# 州的先生 zmister.com Python GUI教程from PyQt5 import QtCore,QtWidgets,QtGuifrom GUI import compleximport sysclass MainWindow(object): def __init__(self): app = QtWidgets.QApplication(sys.argv) MainWindow = QtWidgets.QMainWindow ui = complex.Ui_MainWindow ui.setupUi(MainWindow) MainWindow.show sys.exit(app.exec_)if __name__ == "__main__": MainWindow

实现日历选择同步到日期选择器

我们在选项卡1的子选项卡2中构建了一个日期修改器和一个日历。

我们需要在日历上对日期进行点击的时候,日期修改器上同步显示我们选择的日期。

我们在MainWindow类中,新建一个update_date方法,用于设置日期修改器的数值:

def update_date(self): self.ui.dateEdit.setDate(self.ui.calendarWidget.selectedDate)

再新建一个update_calendar方法,用于设置点击日历的信号/槽,将其响应到日期修改器上:

def update_calendar(self): self.ui.calendarWidget.selectionChanged.connect(self.update_date)

完整的代码如下:

# coding:utf-8# 州的先生 zmister.com Python GUI教程from PyQt5 import QtCore,QtWidgets,QtGuifrom GUI import compleximport sysclass MainWindow(object): def __init__(self): app = QtWidgets.QApplication(sys.argv) MainWindow = QtWidgets.QMainWindow self.ui = complex.Ui_MainWindow self.ui.setupUi(MainWindow) self.update_date self.update_calendar MainWindow.show sys.exit(app.exec_) # 修改日期修改器数值 def update_date(self): self.ui.dateEdit.setDate(
self.ui.calendarWidget.selectedDate) # 日历信号槽 def update_calendar(self):
self.ui.calendarWidget.selectionChanged.connect(self.update_date)if __name__ == "__main__": MainWindow

这样,我们点击了日历上的一个日期,日期修改器上就会显示我们点击日期。

实现LCD显示器数字跟随刻度盘变化

我们在组合子部件中放置了一个Dial刻度盘和LCDNumber显示器。

我们可以设置LCD显示器上的数字跟随着刻度盘的变化而变化。

同样是创建两个方法:

# 设置LCD数字def set_lcd(self): self.ui.lcdNumber.display(self.ui.dial.value)# 刻度盘信号槽def set_dial(self): self.ui.dial.valueChanged['int'].connect(self.set_lcd)

一个用来设置LCD显示器的数字,一个用来响应刻度盘的信号。

实现按钮控制进度栏

我们在选项卡2中放置了3个单选按钮,和一个进度条,现在我们让单选按钮来控制进度栏的进度。其中,第一个按钮是默认选项,第二个按钮用来重置清零进度栏,第三个按钮用来根据LCD上的数字来更新。

设置第二个按钮清零进度栏,新建一个方法:

def zero_process(self): self.ui.radioButton_2.clicked.connect(self.ui.progressBar.reset)

设置第三个按钮的功能,新建两个方法:

# 更新进度栏def update_process(self): value = self.ui.lcdNumber.value
self.ui.progressBar.setValue(value)

特朗普证实美国正在升级核武器!详细现场视频,尽在“中国网”抖音(787874450)

相关文章

十个顶级Python 图形界面(GUI)框架供你选择

你知道嘛由于Python越来越受欢迎,并得到广泛采用,它将成为2020年流行起来的编程语言。在牢固掌握Python编程基础之后,初学者面临的下一个挑战是构建用户界面。幸运的是,有很多Python框架专...

八款常用的 Python GUI 开发框架推荐

前言本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。作者: 乔柯PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获...

Python用20行代码就能实现漂亮的网页界面?你确定不来看看

我们在写一个网站或者一个网页界面的时候,需要学习很多东西,对小白来说很困难!比如我要做一个简单的网页交互:要懂后端,比如Python里面的Django或者Flask,或者是Java里面的SpringB...

亲身体验 FastUI:用 Python 快速构建美观的用户界面

最近,我有幸接触到一个非常有趣的 Python 库 FastUI,它是一个简单但强大的框架,可以帮助我们快速构建用户界面(UI)。作为一名 Python 开发者,UI 开发一直让我有点头疼,特别是当需...

如何使用Python构建简单的UI?_python如何做ui

全文共3154字,预计学习时长8分钟借助Streamlit框架,使用用户界面展示Python项目变得前所未有的简单,你可以仅仅使用Python代码来构建基于浏览器的UI。本次演示将为迷宫求解器程序构建...