非主线程(GUI线程)中实现弹窗

2023-05-16

非主线程(GUI线程)中实现弹窗

  • 目录
  • 一、在非主线程(GUI线程)中实现弹窗
      • Step 1: 创建界面文件(ui_run_loop_dialog.py)
      • Step 2:代码主体 (run_loop_dialog.py)
      • Step 3:效果


目录

一、在非主线程(GUI线程)中实现弹窗

方法:在非主线程中发射槽信号,在主线程进行回应实现,
示例:使用PyQt5写多线程的界面时,在非主线程中实现在界面上弹窗(QMessageBox)

Step 1: 创建界面文件(ui_run_loop_dialog.py)

# -*- coding: utf-8 -*-

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(640, 504)
        self.gridLayoutWidget = QtWidgets.QWidget(Dialog)
        self.gridLayoutWidget.setGeometry(QtCore.QRect(9, 19, 611, 471))
        self.gridLayoutWidget.setObjectName("gridLayoutWidget")
        self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget)
        self.gridLayout.setContentsMargins(0, 0, 0, 0)
        self.gridLayout.setObjectName("gridLayout")
        self.pushButton = QtWidgets.QPushButton(self.gridLayoutWidget)
        self.pushButton.setObjectName("pushButton")
        self.gridLayout.addWidget(self.pushButton, 1, 1, 1, 1)
        spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem, 1, 0, 1, 1)
        self.verticalLayout = QtWidgets.QVBoxLayout()
        self.verticalLayout.setObjectName("verticalLayout")
        self.label = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label.setObjectName("label")
        self.verticalLayout.addWidget(self.label)
        self.gridLayout.addLayout(self.verticalLayout, 0, 0, 1, 2)

        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "非主线程(GUI线程)中实现弹窗"))
        self.pushButton.setText(_translate("Dialog", "打开"))
        self.label.setText(_translate("Dialog", "TextLabel"))



Step 2:代码主体 (run_loop_dialog.py)

import sys
from ui_run_loop_dialog import Ui_Dialog
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox
from PyQt5.QtCore import QThread, pyqtSignal, QTimer
from datetime import datetime


class MinWindow(QMainWindow, Ui_Dialog):
    def __init__(self, parent=None):
        super(MinWindow, self).__init__(parent)
        self.setupUi(self)

        self.time = QTimer()
        self.time.setInterval(1000)
        self.time.timeout.connect(self.refresh)
        self.time.start()

        self.message = Message(self)
        self.message.signal.connect(self.box)
        self.pushButton.clicked.connect(self.message.start)

    def box(self):
        QMessageBox.information(self, '提示', '成功!', QMessageBox.Ok)

    def refresh(self):
        now = datetime.now()
        self.label.setText(str(now))


class Message(QThread):
    signal = pyqtSignal()

    def __init__(self, win):
        super(Message, self).__init__()
        self.window = win

    def run(self):
        self.signal.emit()


if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = MinWindow()
    win.show()
    sys.exit(app.exec_())

其中:
(1)MinWindow为主线程,在MinWindow中实例化message线程,其中主线程中实例化一个Label实时显示时间。定义弹窗函数(box),QMessageBox.information作为示例。
(2)message为附加线程,message的运行由pushbutton控制。
(3)要利用meaasge实现在MinWindow中弹窗,则需要在message中定义信号:

signal = pyqtSignal()

并将这个信号与Window中的函数进行连接:

self.message.signal.connect(self.box)

则运行时将这个信号进行发射即可:

self.signal.emit()

Step 3:效果

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

非主线程(GUI线程)中实现弹窗 的相关文章

  • Python GUI案例之看图猜成语开发(第三篇)

    Python GUI案例之看图猜成语 第三篇 前言 看图猜成语小程序开发 第三篇 游戏闯关模式页面 Python GUI案例之看图猜成语开发 第一篇 Python GUI案例之看图猜成语开发 第二篇 Python GUI案例之看图猜成语开发
  • 【Qt教程】2.2 - Qt5 布局管理器(水平、垂直、栅格布局)、弹簧、设计一个登陆界面

    使用布局管理器 来设计一个登陆界面 都是操作 没代码没理论 参照 Qt设计一登陆窗口布局 1 新建空工程 双击 ui文件 进入界面设计区 我们新建工程时候 使用的是QMainWindow类 会自动包含菜单栏 状态栏 在右上角对象浏览器中 我
  • 用Python做一个简单的视频播放器

    相关文件 关注小编 私信小编领取就好啦 开发工具 Python版本 3 7 8 相关模块 pyqt5模块 以及一些python自带的模块 搭建环境 安装Python并添加到环境变量 pip安装需要的相关模块即可 原理介绍 这里我们主要利用P
  • Python GUI案例之看图猜成语开发(完结篇)

    Python GUI案例之看图猜成语 完结篇 看图猜成语小程序开发 完结篇 总结 完整代码 Python GUI案例之看图猜成语开发 第一篇 Python GUI案例之看图猜成语开发 第二篇 Python GUI案例之看图猜成语开发 第三篇
  • tkinter创建真正的嵌套子窗口

    tkinter创建真正的嵌套子窗口 引言 获取窗口句柄 方法一 方法二 创造嵌入窗口 嵌套在组件中 一些问题 一个简单的例子 2022 7 22问题解决 结语 引言 在我之前的这篇纯tkinter创建嵌套子窗口的文章中 只提及了3种方法 原
  • QT界面GUI设计之Lable图片及文字显示

    QT界面GUI设计之Lable图片及文字显示 今天主要写一下Qt界面设计的Label相关用法 因为没有系统的学习 所以今天发现以前错了好多 今天记录一下 Label的相关用法 首先是搭建一个Label框 这个简单 在设计师里直接拖进去就可以
  • FFT算法和DFT算法C语言实现(赋详解)

    声明 本人在校期间主修过 数字信号处理 这门课程 对离散傅里叶变换 DFT 和快速傅里叶变换 FFT 深有了解 现编写了基于C语言的FFT算法 已完成对抽样序列的FFT变换并通过窗口输出 编写思路 由于FFT变换里面含有对虚数的运算 现将输
  • Qt D、Q 指针学习和二进制兼容

    文章目录 Qt 中 D Q 指针的实现 Qt 中 D Q 指针的实现 Qt 中 D Q 指针机制的实现是通过宏定义 实现代码在 qtbase gt src gt corelib gt qglobal h 和 qobject h qobjec
  • Qt软件发布教程(生成安装包)inno setup打包工具的使用

    一 生成exe软件 首先要用QT生成ex文件 要保证exe文件能够运行 否则生成的安装包也是不能运行的 比如这样 其中很多的DLL运行环境都要放到里面 二 用inno setup软件生成脚本文件 1 选择创建新的空白脚本文件 点击确next
  • Tkinter PhotoImage 踩坑记录

    1 直接使用PhotoImage file xxxx 报错 tkinter TclError couldn t recognize data in image file xxxxx png 原因 PhotoImage支持的图片格式有限 解决
  • LittlevGL在PC端运行

    上面是我的微信和QQ群 欢迎新朋友的加入 参考官网指导 https github com littlevgl pc simulator sdl visual studio 获取到vs的工程 打开解决方案 编译运行 在源码目录下 打开main
  • python3 GUI- 登陆界面

    python3 GUI 登陆界面 from tkinter import root Tk def Show root1 Tk if En get user and En1 get 123 Label root1 text 登陆成功 bg G
  • 【Qt教程】2.6 - Qt5 自定义控件封装

    自定义控件是将原有控件组合 封装 并填入自定义功能 留出适当的函数接口 方便其他控件的调用 设计窗口时 可以将控件拖入 方便模块化设计 GitHub代码仓库 Qt学习例程 1 建立工程 新建自定义控件 创建widget工程 新建控件 Add
  • Unity3D笔记第三天——GUI

    GUI GUI是Graphical User Interface的缩写 Unity的图形界面系统能容易和快速创建出各种交互界面 与传统的方法 创建GUI对象 标出位置 再写对应的事件函数不同 只需要用很少的代码 就可以把这些工作搞定 原理是
  • 用Java开发贪食蛇小游戏

    用Java开发贪食蛇小游戏 一 实验内容 1 实现贪吃蛇游戏基本功能 屏幕上随机出现一个 食物 称为豆子 上下左右控制 蛇 的移动 吃到 豆子 以后 蛇 的身体加长一点 得分增加 蛇 碰到边界或 蛇头与蛇身相撞 蛇死亡 游戏结束 为游戏设计
  • flutter之BottomNavigationBar

    1 BottomNavigationBar BottomNavigationBar即是底部导航栏控件 显示在页面底部的设计控件 用于在试图切换 底部导航栏包含多个标签 图标或者两者搭配的形式 简而言之提供了顶级视图之间的快速导航 2 构造函
  • 通过PAGE生成python GUI界面(用PAGE拖出需要的GUI界面)

    注 当前我的使用环境为windows10 64bit python v3 6 PAGE v4 14 Tcl v8 6 7 0 当前我定义一个目标 最终需要生成一个登录界面的GUI代码 如下 安装好各软件后 就可以运行PAGE来像VB一样所见
  • tkinter实现页面切换

    tkinter是python标准库的GUI组件 对于一些小脚本 完全够用 但是如果是复杂的逻辑界面 当然是啊pyqt更胜一筹 笔者用过wxpython pysimplegui 代码写完了 在打包的时候都会遇到各种各样的问题 而用tkinte
  • 一个快速实现彩屏应用的跨平台快速原型开发工具平台,最重要的是还免费!8ms.xyz平台原以为是单片机版墨刀,今天上去玩了才知道平台厉害的很,基于WEB端免搭建开发环境,跑的还是C代码编译出来的程序!

    哈哈哈哈 最近发现一个好用的在线编译 下载 烧录的跨平台快速原型开发工具平台 名字好记 8ms 单看名字是真的不知道干嘛的 不知道为啥叫这个 不多想了 好用就得分享给大家 独乐乐不如众乐乐呀 好用的地方到底在哪里呢 一 免开发环境搭建 省时
  • python3GUI--抖音无水印视频下载工具(附源码)

    文章目录 一 准备工作 二 预览 0 复制抖音分享短链接 1 启动 2 运行 3 结果 三 设计流程 1 总体设计 2 详细设计 四 源代码 五 说明 总结 hello 大家好啊 失踪人口回归了 捂脸 本次使用tkinter撰写一篇 抖音无

随机推荐

  • PyQt——QListWidget

    span class token comment coding utf 8 span span class token triple quoted string string 39 39 39 简介 PyQt5中 QListWidget 例
  • PyQt——QTabWidget

    span class token comment coding utf 8 span span class token triple quoted string string 39 39 39 简介 PyQt5中 QTabWidget 例子
  • PyQt——QStackedWidget

    span class token comment coding utf 8 span span class token triple quoted string string 39 39 39 简介 PyQt5中 QStackedWidge
  • PyQt——QDockWidget

    span class token comment coding utf 8 span span class token triple quoted string string 39 39 39 简介 PyQt5中 QDockWidget 例
  • lingo入门教程之二 --- 集合运用

    lingo中的集合用法很多 xff0c 这里主要通过几个例题来进行讲解 对于每一个问题 xff0c 都要先找到对应的目标函数 xff0c 然后对相应值进行初始化 xff0c 然后找到约束条件等进行求解 例1 xff1a SAILCO公司需要
  • PyQt——MDI(多文档界面)

    span class token comment coding utf 8 span span class token triple quoted string string 39 39 39 简介 PyQt5中 QMdiArea 例子 3
  • PyQt——QScrollBar

    span class token comment coding utf 8 span span class token triple quoted string string 39 39 39 简介 PyQt5中 QScrollBar 例子
  • PyQt——QTimer

    span class token comment coding utf 8 span span class token triple quoted string string 39 39 39 简介 PyQT5中 QTimer例子 39 3
  • PyQt——QThread

    span class token comment coding utf 8 span span class token triple quoted string string 39 39 39 简介 PyQT5中 QThread 例子 39
  • PyQt——事件处理

    PyQt事件处理 前言1 低级的事件处理程序2 事件处理机制1 事件机制与信号槽机制的区别2 事件处理的方法3 事件处理实例 前言 1 低级的事件处理程序 span class token comment coding utf 8 span
  • python——精华技巧

    1 大量的if else结构采用字典key来匹配 days span class token operator 61 span span class token string 34 Mon Tue Wed Thu Fri Sat Sun 3
  • Python使用struct处理二进制(pack和unpack用法)

    python有时需要处理二进制数据 xff0c 例如 存取文件 xff0c socket操作时 这时候 xff0c 可以使用python的struct模块来完成 可以用struct来处理c语言中的结构体 一 struct模块中最重要的三个函
  • PyQt——QGroupBox

    QGroupBox为构建分组框提供了支持 分组框通常带有一个边框和一个标题栏 xff0c 作为容器部件来使用 xff0c 在其中可以布置各种窗口部件 布局时可用作一组控件的容器 xff0c 但是需要注意的是 xff0c 内部必须使用布局控件
  • PyQt——高清屏幕自适应设置

    Qt Designer 设计界面 xff1a 在高清屏未设置AA EnableHighDpiScaling的预览界面 xff1a 布局字体控件尺寸上明显存在偏差 设置了AA EnableHighDpiScaling的预览界面 xff1a 运
  • PyQt——实现多窗口

    主窗口通过按钮显示子窗口 1 使用qtdesigner设计窗口 主窗口 xff1a main window 子窗口 xff1a Dialog 生成的是ui文件 2 为两个窗口生成py文件 3 创建两个窗口的继承类 span class to
  • 《统计学习方法》各章节代码实现与课后习题参考解答

    待完成 统计学习方法 各章节代码实现与课后习题参考解答 章节代码课后习题第1章 统计学习方法概论 LeastSquaresMethod 传送门传送门 第2章 感知机 Perceptron 传送门传送门第3章 k近邻法 KNearestNei
  • Opencv的鼠标事件

    span class token keyword import span cv2 span class token keyword import span numpy span class token keyword as span np
  • python多线程之事件触发(线程间通信)

    span class token keyword import span threading event span class token operator 61 span threading span class token punctu
  • 架构规范

    系统架构规范 目录一 架构规范二 数据库规范三 SOA规范四 安全规范 目录 一 架构规范 所有的输入参数需要做合法性检验 xff1b 不允许出现空指针异常和数组越界异常 xff1b 不允许出现不受控制的大对象 xff0c 如没有限定大小的
  • 非主线程(GUI线程)中实现弹窗

    非主线程 xff08 GUI线程 xff09 中实现弹窗 目录一 在非主线程 xff08 GUI线程 xff09 中实现弹窗Step 1 创建界面文件 ui run loop dialog py Step 2 xff1a 代码主体 run