告别会议无趣,也许就差这么一个工具(一)
工作以后,小编发现开会时间要占用工作大部分时间,不仅每次开会的效率却收效甚微,参加会议的人也是无精打采。

那么有没有什么方法可以增加开会的活跃力度,从而提高会议效率。这让小编想到在读书的时候,老师为了提高学生的注意力和警惕性,采用随机点名的方式进行回答问题,答对有奖励,答错有对应的惩罚。因此决定做一个会议随机点名系统
1、涉及内容
- python模块time的使用;
- python文件读写;
- python图形化程序开发库PyQt的使用;
- PyQt布局管理和QTime计数器的使用;
- PyQt界面美化qss样式使用
2、使用PyQt5创建界面布局
2.1 PyQt介绍
Python中提供了多种模块来支持编写桌面应用程序,其中包括内置的 tkinter 模块、第三方的 wxPython、PyQt、Kivy 等。这个模块各有优缺点,在此我们选择 PyQt5 来编写<font color=red>会议随机点名系统</font>。
PyQt5是一组来自Digia的Qt5应用程序框架的Python绑定。它适用于Python2和Python3。这是一个跨平台的工具包,它可以运行在所有主要的操作系统,包括UNIX,Windows,Mac OS。
PyQt5的类存在与如下模块当中:
- QtCore
- QtGui
- QtWidgets
- QtMultimedia
- QtBluetooth
- QtNetwork
- QtPositioning
- Enginio
- QtWebSockets
- QtWebKit
- QtWebKitWidgets
- QtXml
- QtSvg
- QtSql
- QtTest
本篇文章只涉及QtCore 和QtWidhets两个类:
QtCore
模块涵盖了包的核心的非GUI功能,此模块被用于处理程序中涉及到的 time、文件、目录、数据类型、文本流、链接、mime、线程或进程等对象。
QtWidgets
模块包含了一整套UI元素组件,用于建立符合系统风格的classic界面,非常方便,可以在安装时选择是否使用此功能。
这里给两个官方的参看指南:
python模式:
http://pyqt.sourceforge.net/Docs/PyQt5/
C++模式
http://doc.qt.io/qt-5/classes.html
2.2 PyQt安装
PyQt5在Windows系统可以使用命令pip安装
pip install PyQt5
2.3 PyQt5安装测试
在Python中输入:
import PyQt5
不报错即为正确,如下图

3 PyQt5实现随机点名系统
3.1 系统演示
下面是随机点名系统展示动画,请查看:

从上图动画可以看到,当点击开始按钮,名字和福利开始滚动显示;当点击停止按钮,结束点名,保留选中人和对应的福利。
3.2 创建UI界面
在开始设计 UI 界面之前,我们先为随机点名系统做个原型图:

可以发现界面主要有三部分组成:
- 上面的QLabel用来是显示系统名字
- 中间的窗体Widget分为两部分:
- QLabel用来是显示被点到人的名字和福利
- QPushButton按钮实现开始和停止
- 下面的QLabel用来显示图片
3.2.1创建主窗体
打开LiClipse.exe开发工具,新建一个文件夹名称为:随机点名工具,然后在该文件夹下面新建一个python module 名字称:Ui_Main.py
首先引入所需要的模块
import sys from PyQt5 import QtCore, QtGui, QtWidgets
通过继承 QMainWindow,创建一个主窗口的类和创建一个构造函数:
class Ui_MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
"""
构造函数初始化界面
"""
super(Ui_MainWindow, self).__init__(parent)
下面是本文的重点,手写UI界面布局,代码如下:
#设置主窗口名字
self.setObjectName("MainWindow")
#设置系统名字
self.setWindowTitle("随机点名系统")
#设置主窗口大小
self.resize(673, 381)
#设置主窗口最小值
self.setMinimumSize(673, 381)
#设置主窗口最大值
self.setMaximumSize(674, 441)
#创建核心窗口
self.centralwidget = QtWidgets.QWidget(self)
#设置核心窗口名字
self.centralwidget.setObjectName("<u>centralwidget</u>")
#创建QLabel显示上层图片
self.top_label = QtWidgets.QLabel(self.centralwidget)
#设置上层QLabel的大小和位置
self.top_label.setGeometry(0, 0, 673, 85)
#为上层QLabel显示图片
self.top_label.setPixmap(QtGui.QPixmap("top.png"))
#设置上层QLabel的名字
self.top_label.setObjectName("top_label")
#创建QLabel显示下层图片
self.bottom_label = QtWidgets.QLabel(self.centralwidget)
#设置下层QLabel的大小和位置
self.bottom_label.setGeometry(0, 300, 673, 85)
#设置下层QLabel的最小值
self.bottom_label.setMinimumSize(673, 85)
#设置下层QLabel的最大值
self.bottom_label.setMaximumSize(673, 85)
##为下层QLabel显示图片
self.bottom_label.setPixmap(QtGui.QPixmap("bottom.png"))
#设置下层QLabel的名字
self.bottom_label.setObjectName("bottom_label")
#为中间创建一个窗体
self.mid_widget = QtWidgets.QWidget(self.centralwidget)
#设置中间窗体的位置和大小
self.mid_widget.setGeometry(6, 91, 660, 206)
#设置中间窗体的名字
self.mid_widget.setObjectName("mid_widget")
#为中间窗体设置一个水平布局
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.mid_widget)
#调整中间窗体的位置(将左、上、右、下的外边距设置为不同的值)
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
#设置中间窗体布局的名字
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
#为水平布局设置水平、垂直方向的大小调整策略
spacerItem = QtWidgets.QSpacerItem(209, 20, QtWidgets.QSizePolicy.Expanding,
QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_2.addItem(spacerItem)
#创建一个垂直布局
self.verticalLayout = QtWidgets.QVBoxLayout()
#设置垂直布局名字
self.verticalLayout.setObjectName("verticalLayout")
#创建一个QLable显示被抽中的人和福利
self.select_label = QtWidgets.QLabel("王天安-组长发10元红包", self.mid_widget)
#设置最小值
self.select_label.setMinimumSize(204, 63)
#设置最大值
self.select_label.setMaximumSize(209, 63)
#设置QLabel显示格式
self.select_label.setFrameShape(QtWidgets.QFrame.Panel)
self.select_label.setFrameShadow(QtWidgets.QFrame.Plain)
#设置文字位置居中
self.select_label.setAlignment(QtCore.Qt.AlignCenter)
#设置可以自动换行
self.select_label.setWordWrap(True)
#设置QLabel显示名字
self.select_label.setObjectName("select_label")
#为垂直布局选中人的QLabel控件
self.verticalLayout.addWidget(self.select_label)
#创建水平布局
self.horizontalLayout = QtWidgets.QHBoxLayout()
#设置水平布局名字
self.horizontalLayout.setObjectName("horizontalLayout")
#创建开始按钮
self.start_button = QtWidgets.QPushButton("开始",
self.mid_widget)
#设置开始按钮名字
self.start_button.setObjectName("start_button")
#为垂直布局增加开始按钮
self.horizontalLayout.addWidget(self.start_button)
#为水平布局设置水平、垂直方向的大小调整策略
spacerItem1 = QtWidgets.QSpacerItem(
24, 20, QtWidgets.QSizePolicy.Fixed,
QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout.addItem(spacerItem1)
#创建停止按钮
self.pause_button = QtWidgets.QPushButton("停止",
self.mid_widget)
#设置停止按钮名字
self.pause_button.setObjectName("pause_button")
#为水平布局怎加停止按钮控件
self.horizontalLayout.addWidget(self.pause_button)
#布局嵌套
self.verticalLayout.addLayout(self.horizontalLayout)
self.horizontalLayout_2.addLayout(self.verticalLayout)
#为水平布局设置水平、垂直方向的大小调整策略
spacerItem2 = QtWidgets.QSpacerItem(209, 20, QtWidgets.QSizePolicy.Expanding,
QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_2.addItem(spacerItem2)
#核心窗体初始化
self.setCentralWidget(self.centralwidget)
#创建菜单栏
self.menubar = QtWidgets.QMenuBar(self)
#设置菜单栏的大小和位置
self.menubar.setGeometry(0, 0, 673, 23)
#设置菜单栏的名字
self.menubar.setObjectName("<u>menubar</u>")
#添加菜单栏
self.setMenuBar(self.menubar)
在这个 UI 界面中,我们:
- 使用 QWidget() 来创建空的窗口部件;
- 使用 QVBoxLayout() 来创建垂直盒子布局层;
- 使用 QHBoxLayout() 来创建水平盒子布局层;
- 使用 QPushButton() 来创建按钮,实现功能函数;
- 使用 QLabel() 来创建文本标签,用来显示图片和文字;
在代码中增加python主函数,调用界面初始化类
if __name__ == "__main__":
"""
主函数,实例化界面类并显示
"""
app = QtWidgets.QApplication(sys.argv)
ui = Ui_MainWindow()
ui.show()
sys.exit(app.exec_())
运行程序文件,即可以显示随机点名系统主界面,如下图

好了,本次文章就讲到这,接下来会介绍功能的具体实现。