单主机双屏幕实现跨屏幕信息交互的GUI程序
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()