繁体   English   中英

关闭 tkinter.filedialog 后无法在 pygame 中拖动 window

[英]Can't drag window in pygame after closing tkinter.filedialog


我在 **pygame** 中的项目中使用了 **Tkinter**,我遇到了下一个问题,
只是为了说明,我必须编写下一个代码来简要说明我面临的问题。
我已经绑定了鼠标左键单击打开文件对话框然后返回文件名,然后当我单击window时,window的顶部栏改变了颜色,我不能拖动它。
 from tkinter import filedialog import tkinter as tk import pygame as pg def openf(): root = tk.Tk() root.wm_attributes('-topmost', 1) root.withdraw() file = filedialog.askopenfile(filetypes=[("Text file", "*.txt")], defaultextension=[("Text file", "*.txt")]) return file.name def main(): pg.init() fname="File" screen=pg.display.set_mode((400,400)) going=True font=pg.font.Font(pg.font.get_default_font(),30) txt=font.render(fname,True,(255,255,255)) press = 0 while going: posx,posy=pg.mouse.get_pos() for event in pg.event.get(): if pg.QUIT==event.type: going=False elif event.type == pg.MOUSEBUTTONDOWN: press=event.button if(press==3): fname=openf() txt = font.render(fname, True, (255, 255, 255)) print(fname) press=0 screen.fill((255,100,234)) text = font.render("x = " + str(posx) + "y = " + str(posy), True, (255, 255, 255)) screen.blit(text, (100, 200)) screen.blit(txt,(100,100)) pg.display.flip() if __name__ == '__main__': main()

只是为了注意,在执行此操作之前,如果鼠标在主 window 之外和上栏中,则程序不会获取 x 和 y 的坐标,但在调用 filedialog 之后,它会获取坐标

程序图片:: https://drive.google.com/file/d/17tQSVmzUvwEyB_jXVxFQ-6BAm_NwS82m/view?usp=sharing

我还注意到您的代码在对话框关闭并单击 window 后,您的应用程序会捕获整个屏幕的鼠标。 我可以单击任意位置,对话框将再次打开。 可能是 tkinter 问题。

经过反复试验,看起来您只需要在使用 tkinter 后重置您的 pygame 屏幕。 这将重置您的鼠标。

 if(press==3):
     fname=openf()  # open file dialog (tkinter)
     screen=pg.display.set_mode((400,400))  # reset pygame screen
     txt = font.render(fname, True, (255, 255, 255))
     print(fname)
     press=0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM