Курсор мигает с Tkinter и Pygame интегрированы в одном окне - PullRequest
0 голосов
/ 16 января 2019

Ниже приведен код, который я тестирую для интеграции Tkinter и Pygame. Мне удалось получить экран пигмея в окне Tkinter, а также показать кнопку поверх этого экрана пигмея. Кнопка просто рисует белый круг. Проблема начинается сразу после того, как не запускается сконфигурированный курсор Tkinter (X_cursor) при запуске программы. Затем, когда я наведу курсор мыши на кнопку и отпущу ее, курсор начнет мигать с курсором Pygame по умолчанию, а затем снова с настроенным курсором Tkinter. Кроме того, курсор возвращается к значению Pygame по умолчанию, только если мышь находится в движении. В противном случае это правильный "X_Cursor".

Мне трудно понять систему Tkinter, и я уверен, что решение у меня в лицо. Мне просто нужна небольшая помощь, чтобы понять это.

import pygame
import pygame.key
from pygame.locals import *
import tkinter as tk
from tkinter import *
import os


#colors#
BLACK = (0,0,0)
WHITE = (255, 255, 255)
GREEN = (0, 255,0)
RED = (255, 0,0)
BLUE = (0,0, 255)

#buttons#
mButton1 = (1, 0, 0)
mButton2 = (0, 1, 0)
mButton3 = (0, 0, 1)



root = tk.Tk()
root.attributes('-fullscreen', True)
root.title("This title isn't visible since it's fullscreen")
root.config(cursor = "X_cursor")

embed = tk.Frame(root, width = 1920, height = 1080) #creates embed frame for pygame window
embed.grid(columnspan = 10, rowspan = 10) # Adds grid



os.environ['SDL_WINDOWID'] = str(embed.winfo_id())


worldWindow = pygame.display.set_mode((0,0), RESIZABLE)
worldWindow.fill(BLACK)


def draw():
    pygame.draw.circle(worldWindow, WHITE, (250,250), 125)

IMAGEOBJECT = PhotoImage( file = 'TESTIMAGE.gif')


buttonwin = tk.Frame(root, width = 75, height = 75)
buttonwin.grid(row =8, column = 8)
button1 = Button(root, image = IMAGEOBJECT,text = "Draw a circle", cursor = "circle",  command=draw)
button1.grid(row =8 , column = 8)



pygame.display.init()

#loop until user clicks close button
done = False

clock = pygame.time.Clock()

#~~~~~~~~MAIN LOOP~~~~~~~~#
while not done:
    for event in pygame.event.get():
        if (event.type == pygame.QUIT) or (event.type == pygame.KEYDOWN and pygame.K_ESCAPE):
            done = True
        elif event.type == pygame.MOUSEBUTTONDOWN:  
            mButton = pygame.mouse.get_pressed()
            if mButton == mButton1:
                pos = pygame.mouse.get_pos()
                print(pos)

        else:
            pygame.event.clear()

    #limit to 60 frames per second
    clock.tick(60)

    #update the screen with all the draws
    pygame.display.update()
    root.update()
pygame.quit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...