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

发布时间:2024年01月14日

单主机双屏幕实现跨屏幕信息交互的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()
文章来源:https://blog.csdn.net/shouchen1/article/details/135557823
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。