大家好,欢迎来到IT知识分享网。
一、输入组件部分
输入组件分为直接键盘输入、下拉列表选择以及各种形式的调节器调节数值输入等多种方式。有些基础输入组件,例如单行文本输入框、普通多行文本输入框,在每个演示实例里都使用过,使用方法也很简单,这里就不做介绍了。
(一)Combo Box
组合下拉框,单行文本输入框与下拉列表的组合体。在Qt设计大师里可以设定默认下拉列表项,程序运行后点击右侧三角符号弹出默认下拉列表,也可以在组合框内输入文本(可以设定为不许输入),回车后文本被临时加入到下拉列表里,但是关闭程序再运行时下拉列表还是在Qt里默认设定的,不会被程序改变。
1、重要属性
默认下拉列表项,在组合下拉框上右键,选择第一项Edit Items…进行编辑即可。
- editable:是否允许编辑,即能够输入
- currentText:当前文本,设置的默认下拉列表项的第一项内容
- currentIndex:当前索引,默认值为0
- maxVisibleItems:最大可见项目数,默认为10,即显示的最大行数,下拉项目数超过这个值,自动显示滚动条
- insertPolicy:插入策略,在editable属性为真时才起作用,内容如下:
NoInsert:不插入,输入文本后回车,下拉列表项无变化 InsertAtTop:插入在最上面,将输入文本插入到列表项最上面 InsertAtCurrent:插入在当前位置,选择一个项目,然后修改内容回车,相当于修改当前项目 InsertAtBotton:插入在最下面 InsertAfterCurrent:插入在当前项目之后 InsertBeforeCurrent:插入在当前项目之前 InsertAlphabetically:按字母顺序插入
- sizeAdjustPolicy:尺寸调整策略,一共有三个选项,没什么实际作用
- placeHolderText:占位符文本,在其它输入组件里用来提示输入,在这里随便输入文本,组合下拉框上并不会显示,运行后输入框不再显示第一个选项内容,而是内容为空,等待输入
2、常用方法
- activated():被激活信号
- currentIndexChanged():当前索引被改变信号
- currentTextChanged():当前文本被改变信号
- editTextChanged():编辑文本被改变信号
- highlighted():被高亮显示信号
- textActivated():文本被激活信号
- textHighlighted():文本被高亮信号
3、实例演示
本实例利用组合下拉框选项控制日期时间显示格式,通过无限循环和每次延迟1秒的方法达到每秒钟刷新一次当前时间的目的,为了不让无限循环阻塞主进程运行,将无限循环部分放在了一个线程里执行。另外,又对窗口关闭方法进行了重构,即关闭窗口前改变循环判定标志,终止循环,否则线程无法停止,程序陷入死循环状态。演示视频如下:
4、演示代码
import sys, time from datetime import datetime from threading import Thread from PySide6.QtWidgets import QApplication, QMainWindow from ui_comboBox import Ui_Form class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.ui = Ui_Form() self.ui.setupUi(self) # 定义循环显示日期时间的标志 self.flag = True # 定义显示日期时间的初始格式 self.f_string = '%Y-%m-%d %H:%M:%S' # 调用显示当前日期时间方法 self.display_date() # 组合下拉框当前索引被改变信号连接到自定义槽 self.ui.comboBox.currentIndexChanged.connect(self.change_f) # 显示当前日期时间方法 def display_date(self): def redo(): # 定义循环显示方法 while self.flag: # 循环显示标志为真则执行下面语句 self.ui.label_2.setText(datetime.now().strftime(self.f_string)) time.sleep(1) # 延迟1秒 # 为了在循环显示日期时间时不阻塞主进程,采用线程执行循环显示方法 mythread = Thread(target=redo) mythread.start() # 组合下拉框当前索引被改变的自定义槽,根据索引号选择日期时间显示格式 def change_f(self): f_list = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M', '%Y-%m-%d', '%H:%M:%S'] self.f_string = f_list[self.ui.comboBox.currentIndex()] # 重构窗口关闭事件方法,把循环显示标志置为假,否则即使主窗口关闭,线程也无法停止,一直死循环 def closeEvent(self, event): event.accept() self.flag = False sys.exit(0) if __name__ == '__main__': app = QApplication([]) window = MainWindow() window.show() app.exec()
【改良代码】经过仔细研究,发现PySide6.QtCore模块中就有时钟类QTime,这样就不需要使用循环和线程刷新时间显示了。
改良代码如下:
from datetime import datetime from PySide6.QtWidgets import QApplication, QMainWindow from PySide6.QtCore import QTimer, SIGNAL from ui_comboBox import Ui_Form class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.ui = Ui_Form() self.ui.setupUi(self) # 创建一个时钟对象,QTimer是PySide6.QtCore模块中的一个时钟类 timer = QTimer(self) # 将时钟对象timer的信号timeout连接到显示日期槽 self.connect(timer, SIGNAL('timeout()'), self.display_date) # 时钟开始计时,每500毫秒产生一个timeout超时信号,日期时间刷新一次, # 如果设成1000毫秒,在组合下拉框里选择显示格式后,日期时间显示切换太慢,感觉有等待 timer.start(500) # 定义显示日期时间的初始格式 self.f_string = '%Y年%m月%d日 %H:%M:%S' # 调用显示当前日期时间方法 self.display_date() # 组合下拉框当前索引被改变信号连接到自定义槽 self.ui.comboBox.currentIndexChanged.connect(self.change_f) # 显示当前日期时间方法 def display_date(self): self.ui.label_2.setText(datetime.now().strftime(self.f_string)) # 组合下拉框当前索引被改变的自定义槽,根据索引号选择日期时间显示格式 def change_f(self): f_list = ['%Y年%m月%d日 %H:%M:%S', '%Y年%m月%d日 %H:%M', '%Y年%m月%d日', '%H:%M:%S'] self.f_string = f_list[self.ui.comboBox.currentIndex()] if __name__ == '__main__': app = QApplication([]) window = MainWindow() # 窗口最大化显示,showFullScreen()为全屏显示,看不到标题栏 # window.showMaximized() window.show() app.exec()
(二)Text Edit
Text Edit是富文本编辑框,在功能方面与Plain Text Edit组件基本相同,都是多行文本编辑框。在性能方面类似于Word,每个字符都可以单独设置字体、颜色、字号、粗体、斜体及下划线等属性,还允许接收HTML语句设置格式。
1、重要属性
- Family:字体
- Point Size:字号
- Bold:粗体
- Italic:斜体
- Underline:下划线
- Strikeout:删除线
- tabChangesFocus:是否允许使用键盘的Tab键改变窗口组件焦点,默认为假,Tab键在文本编辑框中用作制表位
- undoRedoEnable:是否允许开启重做和撤销功能,默认为真
- readonly:只读
- html:用来接收html语句
2、常用方法
- append():追加文本,在文本内容后面插入文本内容
- clear():清除文本,清除编辑框内的所有内容
- copy():复制,对选中内容进行复制
- cut():剪切,对选中内容进行剪切
- paste():粘贴,对选中内容进行粘贴
- undo():撤销,撤销上一次的操作
- redo():恢复,恢复上一次的操作
- selectAll():选择所有文本
- insertHtml():插入HTML语句
- setAlignment():设置对齐方式
- setCurrentFont():设置当前字体,参数是QFont对象
- setPointSize():设置字号
- setBold():设置粗体
- setItalic():设置斜体
- setUnderline():设置下划线
- setFamily():设置文字的字体
- textCursor():获取当前光标选中位置,返回值是QTextCursor类对象,不是文本类型
- currentCharFormat():获取当前选中文本的字符串格式
- mergeCharFormat():追加格式到原有文本字符串格式中
3、实例演示
实例使用Text Edit、Combo Box、Font Combo Box和Horizontal Slider等组件,制作一个类似Word的图形窗口程序,完成字体设置、颜色设置等功能。演示视频如下:
4、演示代码
from PySide6.QtWidgets import QApplication, QMainWindow, QColorDialog from PySide6.QtGui import QFont, QColor, QBrush from ui_textedit import Ui_Form class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.ui = Ui_Form() self.ui.setupUi(self) self.my_font = QFont() # 创建字体对象 self.select_text = None # 设置被选择文本为空 # 设置初始文字颜色为黑色,自定义变量color是QColor类的颜色对象 self.color = QColor(0, 0, 0) # 以下语句把所有按钮的相应信号都连接到setmyFonts自定义槽上 # 颜色按钮单击信号连接到单独槽,需要打开绑定的颜色对话框选择颜色 self.ui.comboBox.currentTextChanged.connect(self.setmyFonts) self.ui.horizontalSlider.valueChanged.connect(self.setmyFonts) self.ui.toolButton_4.clicked.connect(self.setColor) self.ui.toolButton.clicked.connect(self.setmyFonts) self.ui.toolButton_2.clicked.connect(self.setmyFonts) self.ui.toolButton_3.clicked.connect(self.setmyFonts) self.ui.fontComboBox.currentTextChanged.connect(self.setmyFonts) # 更改选中文本的大小 def setmyFonts(self): if self.ui.comboBox.hasFocus(): # 如果组合框有焦点,即字号被更改,则设置水平滑块的值等于组合框的值 self.ui.horizontalSlider.setValue(int(self.ui.comboBox.currentText())) if self.ui.horizontalSlider.hasFocus(): # 如果水平滑块有焦点,则让组合下拉框的内容等于水平滑块的值 self.ui.comboBox.setCurrentText(str(self.ui.horizontalSlider.value())) self.select_text = self.ui.textEdit.textCursor() # 获取当前光标选中位置 self.my_font.setPointSize(self.ui.horizontalSlider.value()) # 设置自定义字体的字号为水平滑块的值 self.my_font.setBold(self.ui.toolButton.isChecked()) # 设定加粗 self.my_font.setItalic(self.ui.toolButton_2.isChecked()) # 设定倾斜 self.my_font.setUnderline(self.ui.toolButton_3.isChecked()) # 设定下划线 self.my_font.setFamily(self.ui.fontComboBox.currentText()) # 设定字体为字体组合下拉框当前字体名称 text_format = self.ui.textEdit.currentCharFormat() # 获取当前选中文本的字符串格式 text_format.setFont(self.my_font) # 用自定义字体设置当前选中文本 text_format.setForeground(QBrush(QColor(self.color))) # 设置字体颜色 self.select_text.mergeCharFormat(text_format) # 追加格式到原有文本 # 更改选中文本的颜色 def setColor(self): self.color = QColorDialog.getColor() # 打开颜色对话框选择颜色 self.setmyFonts() # 选择颜色后调用设置字体方法 if __name__ == '__main__': app = QApplication([]) window = MainWindow() window.show() app.exec()
二、显示组件部分
(一)QWebEngineView
QWebEngineView是Web引擎视图组件,使用Chrome内核,用来加载网页和HTML代码,它在Qt设计大师里不需要任何设置。如果程序中只用QWebEngineView组件加载一个Web页面或者HTML代码,没有其它复杂操作,那么可以在Qt设计大师里将QWebEngineView直接放置到主窗口中,并做好窗口布局就行了。但是如果想用QWebEngineView进行一些复杂操作,例如完成类似浏览器的功能,那么就不能在Qt设计大师里放置这个组件了,而是预留好位置,然后在代码中创建QWebEngineView的实例对象,完成各种复杂操作。QWebEngineView组件还可以直接加载HTML代码,按照HTML代码的格式显示输出内容。
1、常用方法
- url():获取加载页面的url,这是QUrl类对象
- toDisplayString():显示成字符串,与url()方法搭配使用
- title():获取加载页面的标题
- page():获取页信息
- hasFocus():获取是否有焦点
- zoomFactor():获取缩放因子,用来控制放大和缩小显示
- back():后退一页
- forward():前进一页
- reload():刷新
- load():读入Web页面
- setUrl():加载url,跟load功能基本相同
- setFactor():设置缩放因子
- setHtml():加载Html代码
- resize():重新定义尺寸
- show():显示新建窗口
2、实例演示
(1)加载HTML代码
在Qt设计大师里创建窗口,放置一个QWebEngineView组件,没有进行任何设置,然后在代码里操作。演示代码如下:
from PySide6.QtWidgets import QApplication, QWidget
from ui_test import Ui_Form
# 定义HTML字符串
html = '''
<!DOCTYPE html> <html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>Hello 我爱Python!</h1>
<h2>Hello PySide6</h1>
<h3>Hello Qt设计大师</h1>
<h4>Hello QWebEngineView>
<h5>Hello 显示html</h1>
</body>
</html>
'''
class MainWindow(QWidget):
def __init__(self):
super(MainWindow, self).__init__()
self.ui = Ui_Form()
self.ui.setupUi(self)
# 加载HTML代码到QWebEngineView组件上
self.ui.webEngineView.setHtml(html)
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
exit(app.exec())
运行效果如下:
(2)加载一个Web页面
在窗口里放置一个QWebEngineView组件,不用设置,直接保存窗口文件,然后到主程序里书写如下代码:
from PySide6.QtWidgets import QApplication, QMainWindow from ui_QWebEngineView import Ui_Form class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.ui = Ui_Form() self.ui.setupUi(self) # 将窗口的中央组件指定到QWebEngineView上,这样QWebEngineView就占据整个窗口页面 self.setCentralWidget(self.ui.webEngineView) # 利用QWebEngineView的load方法加载网页 self.ui.webEngineView.load('https://www.baidu.com') if __name__ == '__main__': app = QApplication([]) window = MainWindow() window.showMaximized() # 设置窗口以最大化方式显示 app.exec()
运行效果:
(3)制作简单浏览器
在Qt设计大师里创建上下两个布局,上面布局里放置倒退、前进、刷新、放大显示和缩小显示按钮,还有一个单行文本输入框,用来输入和显示网址。下面的布局里是空的,为QWebEngineView组件预留,QWebEngineView组件将在代码中动态生成。先看效果:
本例的浏览器,在地址栏中输入网址后回车,会自动加载页面并覆盖原有页面,使用后退和前进按钮可以切换页面。点击页面上的链接后,直接在当前窗口打开新页面,并没有设计成新建窗口形式。
代码如下:
from PySide6.QtCore import QUrl from PySide6.QtWebEngineWidgets import QWebEngineView from PySide6.QtWidgets import QApplication, QWidget from ui_mybrowser import Ui_Form class MainWindow(QWidget): def __init__(self): super(MainWindow, self).__init__() self.ui = Ui_Form() self.ui.setupUi(self) self.myView = WebView() # 创建继承自QWebEngineView的自定义类对象 self.ui.horizontalLayout_2.addWidget(self.myView) # 将新生成的QWebEngineView组件对象添加到事先准备好的布局中 self.mybrowser_init() # 初始化浏览器 self.ui.btn_back.clicked.connect(self.myView.back) # 回退功能 self.ui.btn_forward.clicked.connect(self.myView.forward) # 前进功能 self.ui.btn_reload.clicked.connect(self.myView.reload) # 刷新功能 self.ui.btn_Zoomin.clicked.connect(self.func_zoomin) # 放大按钮被单击信号和槽 self.ui.btn_Zoomout.clicked.connect(self.func_zoomout) # 缩小按钮被单击信号和槽 self.ui.lineEdit.returnPressed.connect(self.visit_web) # 文本编辑框(地址栏)按回车键信号和槽 # 浏览器初始化方法 def mybrowser_init(self): self.myView.load(QUrl('https://www.baidu.com')) # 放大显示方法 def func_zoomin(self): self.myView.setZoomFactor(self.myView.zoomFactor() + 0.1) # 缩小显示方法 def func_zoomout(self): self.myView.setZoomFactor(self.myView.zoomFactor() - 0.1) # 访问地址栏里输入的网址web页面 def visit_web(self): url = self.ui.lineEdit.text() if self.ui.lineEdit.hasFocus() and len(url) > 0: if not url.startswith('http'): url = 'https://' + url self.ui.lineEdit.setText(url) self.myView.load(QUrl(url)) # 自定义QWebEngineView的派生类,主要是为了重写该类的创建窗口方法,用来响应当前页面里链接被点击事件 class WebView(QWebEngineView): # 重写新建窗口方法,就是点击页面链接时响应方法 def createWindow(self, QWebEnginePage_WebWindowType): window.setWindowTitle(self.title()) # 动态设置窗口标题 window.ui.lineEdit.setText(self.url().toDisplayString()) # 动态设置地址栏url return self if __name__ == '__main__': app = QApplication([]) window = MainWindow() window.showMaximized() app.exec()
(4)使用标签页加载显示新页面的浏览器
本例使用了一个TabWidget组件(默认没有tab标签页,在程序中动态添加),用来承载QWebEnginePage,加载并显示Web页面。每次点击页面链接或者在地址栏打开新网站,都会加载到TabWidget组件的Tab标签上,形成多页面在一个窗口内的浏览器风格,并且每个标签页都带有关闭按钮,可以单独关闭标签页。先看一下演示效果:
代码如下:
from PySide6.QtCore import QUrl from PySide6.QtWebEngineWidgets import QWebEngineView from PySide6.QtWidgets import QApplication, QWidget from ui_QWebEngineView import Ui_Form class MainWindow(QWidget): def __init__(self): super(MainWindow, self).__init__() self.ui = Ui_Form() self.ui.setupUi(self) # 程序运行后默认打开百度网站 self.url = QUrl('https://www.baidu.com') # 初始化url self.tab_title = '百度一下,你就知道' # 初始化tab页标题文本 self.visit_web() # 调用访问网页方法 self.ui.lineEdit.returnPressed.connect(self.geturl) # 网址输入框回车信号 self.ui.tabWidget.tabCloseRequested.connect(self.close_tab) # 关闭tab标签页请求 # 获取url方法 def geturl(self): temp_url = self.ui.lineEdit.text().lower() # 获取网址输入框内容,并转换成小写 if len(temp_url) == 0: # 如果网址内容为空,则直接返回 return num = temp_url.find('http') if num < 0: # 如果输入的网址不含http部分,则添加https:// temp_url = 'https://' + temp_url self.url = QUrl(temp_url) # 创建完整QUrl地址 self.tab_title = temp_url # 让tab标签页标题等于网址字符串 self.visit_web() # 开始调用访问网页方法 # 创建新的tab标签页并访问网页 def visit_web(self): view = WebView(self.ui.tabWidget) # 创建网页视图对象 view.load(self.url) # 调用父类QWebEngineView的load方法加载url sno = self.ui.tabWidget.addTab(view, self.tab_title) # 添加新标签页,并装载网页视图对象,设置标签页标题,返回新增标签页id号 self.ui.tabWidget.setCurrentIndex(sno) # 切换到当前tab页 # 关闭tab标签页方法 def close_tab(self, index): self.ui.tabWidget.removeTab(index) # 关闭tab页面 class WebView(QWebEngineView): def __init__(self, *args, kwargs): QWebEngineView.__init__(self, *args, kwargs) # 调用父类初始化方法 # 调用父类对象的parent()方法,获取网页视图的目标加载组件,会得到self.ui.tabWidget, # 没有这个步骤,在新建窗口方法createWindow里是找不到窗口的tabWidget组件的,所以需要事先获取 self.tab = self.parent() def createWindow(self, windowType): # 重构创建窗口方法,即点击页面链接会在新建tab标签页中打开 new_webView = WebView(self.tab) # 创建新的网页视图实例,嵌套生成 sno = self.tab.addTab(new_webView, self.title()) window.ui.lineEdit.setText(self.url().toDisplayString()) self.tab.setCurrentIndex(sno) return new_webView if __name__ == '__main__': app = QApplication([]) window = MainWindow() window.showMaximized() app.exec()
(二)Progress Bar
Progress Bar是进度条组件,通过指定最小值和最大值来设定范围,通过value值改变当前进度。进度条组件可以按照数值形式显示进度,也可以按照百分比形式显示。
1、重要属性
- minimum:最小值,指定进度条数值范围的最小值
- maximum:最大值,指定进度条数值范围的最大值
- value:当前数值
- TextVisible:进度条图形后面的文本是否显示
- format:格式,如果内容为空,则按照数值形式显示进度;如果内容为%p%,则按照百分比形式显示
2、常用方法
- setValue():设置当前数值
- setMaximum():设置最大值
- setMinimum():设置最小值
- setRange():设置范围
- reset():复位
3、实例演示
本实例使用循环加延迟的形式模拟系统处理事务的过程,然后把处理事务的进度反馈到进度条上进行显示。由于循环在执行过程中是阻塞式的,循环不结束窗口就无法执行其它操作,所以本例将循环执行部分放到一个线程里去工作。在实例运行时就可以看到,点击按钮开始执行循环操作后,窗口界面仍然处于活动状态,按钮依然可以点击。
实践证明,如果在线程里直接更改窗口元素的设置,会发生错乱等问题,所以不在进程里直接更新进度条数值。我们自定义一个信号库,在信号库里自定义一个信号,带有一个整形参数,用来给进度条传递数值。然后,把自定义信号对象的信号连接到处理进度条的槽上。这样,只要在处理事务的线程里发射这个自定义信号,处理进度条方法就可以接收到传过来的数值,调整进度条进度指示了。
演示视频如下:
4、演示代码
from threading import Thread from time import sleep from PySide6.QtCore import QObject, Signal from PySide6.QtWidgets import QApplication, QWidget, QMessageBox from PySide6.QtGui import QFont from ui_progressBar import Ui_Form # 自定义信号库 class SignalStore(QObject): # 定义一种信号,带有一个整型参数,用来给进度条传送值 progress_update = Signal(int) # 创建自定义信号对象 so = SignalStore() class MainWindow(QWidget): def __init__(self): super(MainWindow, self).__init__() self.ui = Ui_Form() self.ui.setupUi(self) # 创建两个QFont对象,一个字体的粗体设为真,一个字体的粗体设为假 self.myFont1 = QFont() self.myFont2 = QFont() self.myFont1.setBold(True) self.myFont2.setBold(False) self.ongoing = False # 设定默认工作状态为假 # 自定义信号被触发,连接到修改进度条进度槽 so.progress_update.connect(self.setProgress) # 按钮单击信号连接到启动服务槽 self.ui.pushButton.clicked.connect(self.start_service) # 启动服务按钮被单击的方法 def start_service(self): # 创建事件具体处理方法,用来分配给线程 def thread_work(): self.ongoing = True # 将工作状态设为真 for i in range(1, 8): sleep(1) # 睡眠1秒钟,模拟开始工作 if i == 1: command = f'self.ui.label{i}.setFont(self.myFont1)' eval(command) else: command = f'self.ui.label{i}.setFont(self.myFont1)' eval(command) command = f'self.ui.label{i - 1}.setFont(self.myFont2)' eval(command) # 发射自定义信号,并将i值携带出去,通知主程序去做相应工作,不能在进程里修改主界面元素,容易造成错误 so.progress_update.emit(i) # 参数i将传递给进度条处理方法 self.ui.label7.setFont(self.myFont2) self.ongoing = False # 工作结束 # 如果正在工作,则点击按钮就会弹窗提示 if self.ongoing: QMessageBox.warning(self, '警告', '启动任务正在进行中,请等待完成!') return # 创建和启动进程,如果不采取进程的形式,那么在处理阻塞性事务时,主界面将不能进行任何操作 worker = Thread(target=thread_work) worker.start() # 设置进度条当前值的方法 def setProgress(self, value): self.ui.progressBar.setValue(value) if __name__ == '__main__': app = QApplication([]) window = MainWindow() window.show() app.exec()
(三)LCD Number
LCD Number是液晶显示屏数字组件,展现过去电子表风格的数字显示效果,可以显示二进制数、八进制、十进制和十六进制数字。
1、重要属性
- digitCount:数字位数
- mode:显示方式,选项对应二进制数、八进制、十进制和十六进制数字
- segmentStyle:分段样式,就是显示样式
- value:数值
- intValue:整形值
2、常用方法
- display():显示内容,可以显示字符串、双精度小数和整数
- setBin():设置二进制
- setDec():设置十进制
- setHex():设置十六进制
- setOct():设置八进制
3、实例演示
本实例演示用LCD Number组件制作一个电子表程序,代码的时钟和时间处理部分可以参照本文开篇处ComboBox组件实例代码。演示视频如下:
4、演示代码
from PySide6.QtWidgets import QApplication, QMainWindow from PySide6.QtCore import QTime, QTimer, SIGNAL from ui_digitalclock import Ui_Form class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.ui = Ui_Form() self.ui.setupUi(self) # 创建时钟对象,超出参数指定的数值(毫秒)就会发射超时信号timeout timer=QTimer(self) self.connect(timer,SIGNAL('timeout()'),self.showTime) timer.start(1000) self.showTime() def showTime(self): # 利用QTime模块获取当前时间 time=QTime.currentTime() text=time.toString('hh:mm') # 秒数为偶数时,也就是隔一秒将小时和分钟之间的冒号换成空格,展现冒号闪动的效果 if time.second()%2==0: text=text[:2]+' '+text[3:] self.ui.lcdNumber.display(text) if __name__ == '__main__': app = QApplication([]) window = MainWindow() window.show() app.exec()
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/91413.html