单主机双屏幕实现跨屏幕信息交互的GUI程序

单主机双屏幕实现跨屏幕信息交互的GUI程序

运行程序界面

在这里插入图片描述

屏幕1发送数据,屏幕2接收数据

在这里插入图片描述

在屏幕1按下打开开关,屏幕2播放视频

在这里插入图片描述

代码程序

import tkinter as tk # 导入tkinter模块,用于创建GUI界面
import threading # 导入threading模块,用于创建多线程
import pygetwindow as gw # 导入pygetwindow模块,用于获取窗口信息
import subprocess # 导入subprocess模块,用于执行系统命令
import cv2 # 导入cv2模块,用于视频处理

class Window1:
    def __init__(self):
        self.root = tk.Tk() # 创建一个窗口
        self.root.geometry('200x100+0+0') # 设置窗口大小和位置
        self.root.title('Window 1') # 设置窗口标题

        # 创建一个文本框和按钮用于输入文字
        self.entry = tk.Entry(self.root) # 创建一个文本框
        self.entry.pack() # 显示文本框
        self.button = tk.Button(self.root, text="发送", command=self.send_text) # 创建一个按钮
        self.button.pack() # 显示按钮

        # 绑定回车键事件
        self.entry.bind('<Return>', self.send_text)

        # 添加控制开关的按钮
        self.switch_button = tk.Button(self.root, text="打开开关", command=self.open_switch)
        self.switch_button.pack()

    def send_text(self, event=None):
        text = self.entry.get() # 获取文本框中的文字
        # 在窗口2中显示输入的文字
        global text_label # 声明为全局变量
        text_label.config(text=text) # 修改标签内容
        # 清空文本框内容
        self.entry.delete(0, tk.END)

    def open_switch(self):
        # 打开视频
        try:
            video_path = "C:/Users/Fengzhen/Videos/全向步态视频/侧向步态.mp4" # 视频文件路径
            threading.Thread(target=open_video, args=(video_path,)).start() # 创建一个线程并启动

            window = gw.getWindowsWithTitle("Video")[0]  # 获取窗口信息,替换为实际窗口标题
            # # 设置窗口位置
            # window.moveTo(2000, 100)
        except Exception as e: # 捕获异常
            print(e)

        # 在窗口2中显示开关状态
        global switch_label # 声明为全局变量
        switch_label.config(text="开关已打开") # 修改标签内容

class Window2:
    def __init__(self):
        self.root = tk.Tk() # 创建一个窗口
        self.root.geometry('200x100+2000+0') # 设置窗口大小和位置
        self.root.title('Window 2') # 设置窗口标题

        # 创建一个标签用于显示文字
        global text_label # 声明为全局变量
        text_label = tk.Label(self.root, text="")
        text_label.pack()

        # # 创建一个标签用于显示开关状态
        # global switch_label
        # switch_label = tk.Label(self.root, text="开关已关闭")
        # switch_label.pack()

def open_video(file_path):
    try:
        # 使用cv2读取视频
        cap = cv2.VideoCapture(file_path)

        # 创建窗口并设置位置
        cv2.namedWindow("Video", cv2.WINDOW_NORMAL)
        cv2.moveWindow("Video", 3000, 100)

        while True:
            ret, frame = cap.read() # 读取视频帧
            if not ret: # 如果没有读取到帧,则退出循环
                break

            # 在指定位置显示视频帧
            cv2.imshow("Video", frame)

            if cv2.waitKey(1) & 0xFF == ord('q'): # 按下"q"键退出循环
                break

        cap.release() # 释放视频资源
        cv2.destroyAllWindows() # 关闭所有窗口

    except Exception as e: # 捕获异常
        print(e)

def create_windows():
    window1 = Window1() # 创建窗口1
    window2 = Window2() # 创建窗口2
    window1.root.mainloop() # 进入消息循环
    window2.root.mainloop()

# 创建一个线程用于创建窗口
thread = threading.Thread(target=create_windows)

# 启动线程
thread.start()

# 等待线程结束
thread.join()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/313774.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Java 干货教程】Java实现分页的几种方式详解

一、前言 无论是自我学习中&#xff0c;还是在工作中&#xff0c;固然会遇到与前端搭配实现分页的功能&#xff0c;发现有几种方式&#xff0c;特此记录一下。 二、实现方式 2.1、分页功能直接交给前端实现 这种情况也是有的&#xff0c;(根据业务场景且仅仅只能用于数据量…

RT-Thread GD32F4xx实现SD卡热插拔检测功能

GD32F470移植RT-Thread操作系统添加SD卡功能&#xff0c;增加SD卡热插拔检测 一、RT-Thread移植sd卡功能二、实现SD卡热插拔检测原理三、软件实现过程四、延展之ASSERT ERROR&#xff0c;即RT-Thread断言错误五、延展之STM32 SD卡热插拔检测六、结束语 一、RT-Thread移植sd卡功…

代码随想录算法训练营第三十一天|理论基础、455.分发饼干、376. 摆动序列、53. 最大子序和

题目&#xff1a;理论基础 解释&#xff1a;贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优 题目&#xff1a;455.分发饼干 文章链接&#xff1a;代码随想录 视频链接&#xff1a;LeetCode:455.分发饼干 题目链接&#xff1a;力扣题目链接 图释&#x…

C语言用函数指针实现计算器

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//实现目录函数&#xff1b; void menum() {//打印目录&#xff1b;printf("***********************************************\n");printf("***…

公司官网,选全站定制还是模板建站?

最近更新了公司网站&#xff0c;总算了了一件大事。 虽然很久以前也做网站&#xff0c;但随着技术的发展&#xff0c;以前经常用的dreamwaver、table等形式&#xff0c;不知道被升级了多少代。现在前端同事说起的各种架构&#xff0c;对我来说是云里雾里。只能看懂一点点。 这…

【cmu15445c++入门】(5)c++中的模板类

一、template模板类 除了模板方法【cmu15445c入门】(4)c中的模板方法 模板也可以用来实现类 二、代码 /*** file templated_classes.cpp* author Abigale Kim (abigalek)* brief Tutorial code for templated classes.*/// Includes std::cout (printing). #include <io…

Dubbo的SPI机制

Dubbo SPI的基本工作流程&#xff1a; 加载扩展点配置&#xff1a;Dubbo SPI首先会加载所有的扩展点配置&#xff0c;这些配置通常是在META-INF/dubbo目录下的properties文件中定义的。每个配置文件的名称就是扩展点接口的全限定名&#xff0c;文件内容是扩展点实现的键值对&am…

BSP视频教程第29期:J1939协议栈CAN总线专题,源码框架,执行流程和应用实战解析,面向车通讯,充电桩,模组通信等(2024-01-08)

视频教程汇总帖&#xff1a;【学以致用&#xff0c;授人以渔】2024视频教程汇总&#xff0c;DSP第12期&#xff0c;ThreadX第9期&#xff0c;BSP驱动第29期&#xff0c;USB实战第5期&#xff0c;GUI实战第3期&#xff08;2024-01-08&#xff09; - STM32F429 - 硬汉嵌入式论坛 …

【2024系统架构设计】 系统架构设计师第二版-面向服务架构设计理论与实践

目录 一 概述 二 SOA的参考架构 三 SOA主要协议和规范 四 SOA设计标准和原则 五 SOA的设计模式 六 SOA的构建和实施 ​

《豫鄂烽火燎原大小焕岭》:一部穿越时空的历史史诗

《豫鄂烽火燎原大小焕岭》&#xff1a;一部穿越时空的历史史诗 一部赓续红色血脉的生动教材 一部讴歌时代英雄和人民精神宝典 当历史的烽烟渐渐远去&#xff0c;留下的是一页页泛黄的记忆和无数英雄的壮丽诗篇。李传铭的力作《豫鄂烽火燎原大小焕岭》正是这样一部深情的回望&am…

AIGC必备知识点:你不可不知的CNN(卷积神经网络)-知识全解析!

Look&#xff01;&#x1f440;我们的大模型商业化落地产品&#x1f4d6;更多AI资讯请&#x1f449;&#x1f3fe;关注Free三天集训营助教在线为您火热答疑&#x1f469;&#x1f3fc;‍&#x1f3eb; 大家在谈论的卷积神经网络究竟是什么&#xff1f;(Convolutional Neural Ne…

uniapp h5 发行后 微信第二次打开网址 页面白屏

发行后把网址给客户&#xff0c;第一次可以正常登录打开&#xff0c;第二次打开白屏 原因&#xff1a;第一次打开时没有token&#xff0c;所以跳转登录页&#xff0c;可以正常访问 第二次打开时有token&#xff0c;但是网址根目录没有配置默认页面&#xff0c;所以白屏 解决…

视频转为序列图的软件,让视频批量转为序列图

你是否曾经遇到过这样的困境&#xff1a;需要将一段视频转为一系列的图片&#xff0c;但却没有合适的工具来完成&#xff1f;或许你曾经手动截图&#xff0c;或者用其他方式&#xff0c;但结果往往不尽如人意&#xff0c;图片质量差、色彩失真、画面不清晰。现在&#xff0c;让…

Java实现获取两个时间节点之间的日期、月份、年份列表

我们在做一个需求的时候需要后端返回一个选中时间内的时间日期、月份、年份列表&#xff1a; 如&#xff1a;我想查询2024-01-01到2024-01-20这个时间里面的所有日期。 下面来看看代码 /*** 根据日期格式不同计算两个时间内的日期、月份、年* param beginTime 开始时间* para…

怎么把workspace的数据导入到simulink进行FFT分析?

怎么把数据导入到simulink在这篇博客已经阐述了&#xff0c;那么如何把数据导入到simulink还能进行FFT分析呢&#xff1f; 首先我们看simulink的FFT分析界面&#xff0c;&#xff08;前置步骤&#xff1a;导入powergui模块&#xff0c;双击powergui模块&#xff0c;Tool选项卡…

怎么使用好爬虫IP代理?爬虫代理IP有哪些使用技巧?

在互联网时代&#xff0c;爬虫技术被广泛应用于数据采集和处理。然而&#xff0c;在使用爬虫技术的过程中&#xff0c;经常会遇到IP被封禁的问题&#xff0c;这给数据采集工作带来了很大的困扰。因此&#xff0c;使用爬虫IP代理成为了解决这个问题的有效方法。本文将介绍如何使…

C++ Webserver从零开始:基础知识(一)——Linux网络编程基础API

前言 本专栏将从零开始制作一个C Webserver&#xff0c;用以记录笔者学习的过程 如果你想要跟着我这个专栏制作一个C Webserver,你需要掌握以下前置基础课程知识&#xff1a; 1.C/C的语法&#xff08;在Leetcode刷100~200题的程度即可&#xff09; 2.计算机网络基础知识 3…

Jmerer之FTP测试

1、文件上传下载测试&#xff0c;可以使用sample:FTP请求&#xff0c;当然也可以使用HTTP Request采样器中的File Upload向服务器上传文件 2、本章重点介绍FTP请求进行文件的上传下载测试&#xff0c;添加 FTP请求&#xff0c;界面主要配置如下&#xff1a; Server Name or I…

5G前装搭载率即将迈过10%大关,车载通讯进入多层次增长通道

对于智能化来说&#xff0c;车载通讯性能的提升&#xff0c;对于相关功能的用户体验优化、进一步减少通讯时延以及打开应用新空间&#xff0c;至关重要。 目前&#xff0c;2G/3G正在进入运营商逐步关闭运营的阶段&#xff0c;4G依然是主力&#xff0c;但5G也在迎来新的增长机会…