Я сделал виндо без рамки, чтобы перемещаться по экрану.
Но при перемещении виджет 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