微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

输入条目中的python tkinter + pygame问题

如何解决输入条目中的python tkinter + pygame问题

我目前正在通过将pygame嵌入Tkinter窗口来开发显示器,以便可以同时使用Tkinter和pygame主窗口中定义的元素来按时刷新视图。

当我使用Tkinter的Entry输入一些文本时,如果我单击pygame部件,则仍会保持对该Entry的关注,但是当我在键盘上按“退格”键时,Entry会添加一个空字符(如空格键) ),当我在python上打印时,它显示为。之后,当我用鼠标单击该条目时,一切都将变得正常。

有什么解决办法吗?谢谢。

编辑:

以下是演示我的问题的代码。运行此代码后,请单击顶部的条目,然后单击黑色位置(pygame区域),然后尝试按退格键。

import tkinter as tk
from tkinter import ttk
import os

import pygame
from pygame.locals import *


class displayer():
    def __init__(self):
        self.tkRoot = tk.Tk()

        self.ScreenWidth = self.tkRoot.winfo_screenwidth() * 1  # *1 to avoid using dynamic reference
        self.ScreenHeight = self.tkRoot.winfo_screenheight() * 1  # *1 to avoid using dynamic reference

        self.tkRoot.title('Test')

        self.MainFrame = tk.Frame(self.tkRoot,width=100,height=100) #creates embed frame for pygame window
        self.MainFrame.grid(row=0,column=0,columnspan=1) # Adds grid

        self.Entry = tk.Entry(self.MainFrame)
        self.Entry.grid(row=0,column=0) # Adds grid

        self.GameFrame = tk.Frame(self.MainFrame,width=1000,height=1000)
        self.GameFrame.grid(row=1,column=0) # Adds grid
        os.environ['SDL_WINDOWID'] = str(self.GameFrame.winfo_id())
        os.environ['SDL_VIDEODRIVER'] = 'windib'

        # Pygame
        pygame.init()
        pygame.font.init()

        pygame.display.set_mode((1000,1000),pygame.RESIZABLE)
        pygame.display.set_caption('Test')
        self.clock = pygame.time.Clock()
        
        self.displayLoop_boo = True
        while self.displayLoop_boo:
            self.tkRoot.update()

        pygame.quit()

if __name__ == "__main__":
    mydisplayer = displayer()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。