Ткинтер + пигмент мигает окном при перетаскивании - PullRequest
1 голос
/ 13 марта 2019

Я сделал виндо без рамки, чтобы перемещаться по экрану. Но при перемещении виджет Pygame не обновляется и даже полностью очищается и перерисовывается, что заставляет окно мигать при высокой (100 к / с) частоте кадров.

у кого-нибудь есть идея полностью прекратить обновлять только виджет pygame или перестать мигать?

спасибо (вы можете перетащить окно с белым квадратом и убить программу с помощью escape.

import pygame
import random
from tkinter import *
import os
GuiColor = "#2b2f37"

StopGame = False # variable verifiant l'etat du programe


class Gui(Tk):
    def __init__(self, master):
######################
#       Set window parameters
######################
        self.frame = Frame(master, width = 500, height = 500)
        DOrefresh = True
        largPix = 3
        gap = 0
        width = 256*largPix+253*gap + 100
        height = 64*largPix+61*gap + 100

        master.title("SuperMacro")
        master.resizable(False, False)
        master.configure(background=GuiColor)
        master.overrideredirect(True)
        x=50
        y=50
        master.geometry('{}x{}+{}+{}'.format(width,height,50,50))

        os.environ['SDL_WINDOWID'] = str(master.winfo_id())
        os.environ['SDL_VIDEODRIVER'] = 'windib'

        screen = pygame.display.set_mode((width,height))
        screen.fill(pygame.Color(255,5,255))
        pygame.display.set_caption('NIBBA')
        pygame.display.init()


        master.info = Canvas(master, width=40,height=40 )
        master.info.place(relx=1.0, rely=1.0, x=-2, y=-2,anchor="se")


        def StartMove(event):
            master.x = event.x
            master.y = event.y
            print("hold")
            DOrefresh = False

        def StopMove(event):
            master.x = None
            master.y = None
            print("release")
            DOrefresh = True

        def OnMotion(event):
            deltax = event.x - master.x
            deltay = event.y - master.y
            x = master.winfo_x() + deltax
            y = master.winfo_y() + deltay
            master.geometry("+%s+%s" % (x, y))


        infoObject = pygame.display.Info()


        master.info.bind("<ButtonPress-1>", StartMove)
        master.info.bind("<ButtonRelease-1>", StopMove)
        master.info.bind("<B1-Motion>", OnMotion)


        def quit(): #quitter le prgm
            exit() #quiter le programe
            pygame.quit() # "désinitialise les modules pygame importés"



root = Tk()
Gui(root)
clock = pygame.time.Clock()

while not StopGame:

    pygame.display.update()
    root.update()

    for event in pygame.event.get(): #Gestionaire d'evènements (souris clavier boutons ... )
        if event.type == pygame.QUIT: #Si la croix rouge (en haut a droite est cliquée) -> plein écran (inutile) -> preview en bare des taches (ok)
            quit() #quitter le prgm
        if event.type == pygame.KEYDOWN: #Si une touche est enfoncée
            if event.key == pygame.K_ESCAPE: #si la touche échap est enfoncée
                quit() #quitter le prgm


        #showFPS()
    clock.tick(100) # définir le rafraichissement de l'écran
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...