Можете ли вы изменить размер окна overflowdirect в tkinter без мерцания при одновременной настройке положения и ширины?Python

Программы на Python
Ответить Пред. темаСлед. тема
Гость
 Можете ли вы изменить размер окна overflowdirect в tkinter без мерцания при одновременной настройке положения и ширины?

Сообщение Гость »


У меня есть окно overflowdirect, размер которого нужно изменить при перетаскивании мышью.

Пример рабочий, но когда я перетаскиваю края/углы sw, w, nw, n и ne, возникает мерцание (наиболее заметное при быстром перетаскивании), скорее всего из-за того, что в этом случае я регулирую ширину/углы. высота и положение одновременно.

Я попробовал обновить Idle_tasks, чтобы посмотреть, сгладит ли это переход, но это не помогло.
импортировать tkinter как tk класс Box(tk.Tk): защита __init__(сам): супер().__init__() self.drag_point_x = Нет self.drag_point_y = Нет self.drag_margin = 15 собственная ширина = 400 self.height = 200 self.x = 300 self.y = 300 self.geometry(f"{self.width}x{self.height}+{self.x}+{self.y}") self.overrideredirect(1) self.bind("", self.on_dragged) self.bind("", self.on_click) self.bind("", self.on_motion) Защиту on_dragged (я, событие): mouse_x = self.winfo_pointerx() mouse_y = self.winfo_pointery() delta_width = self.x - mouse_x delta_height = self.y - mouse_y если self.drag_point == 'e': self.width = mouse_x - self.x elif self.drag_point == 'se': self.width = mouse_x - self.x self.height = mouse_y - self.y elif self.drag_point == 's': self.height = mouse_y - self.y elif self.drag_point == 'sw': self.height = mouse_y - self.y self.width += delta_width self.x = mouse_x elif self.drag_point == 'w': self.width += delta_width self.x = mouse_x elif self.drag_point == 'nw': self.width += delta_width self.height += delta_height self.x = mouse_x self.y = mouse_y elif self.drag_point == 'n': self.height += delta_height self.y = mouse_y elif self.drag_point == 'ne': self.width = mouse_x - self.x self.height += delta_height self.y = mouse_y self.geometry(f"{self.width}x{self.height}+{self.x}+{self.y}") def on_click(сам, событие): self.drag_point_x = event.x self.drag_point_y = event.y Защиту on_motion (я, событие): если event.x < self.drag_margin: если event.y < self.drag_margin: self.config(cursor="size_nw_se") self.drag_point = "nw" elif event.y > self.height - self.drag_margin: self.config(cursor="size_ne_sw") self.drag_point = "sw" еще: self.config(cursor="size_we") self.drag_point = "w" elif event.x > self.width - self.drag_margin: если event.y < self.drag_margin: self.config(cursor="size_ne_sw") self.drag_point = "не" elif event.y > self.height - self.drag_margin: self.config(cursor="size_nw_se") self.drag_point = "се" еще: self.config(cursor="size_we") self.drag_point = "е" elif event.y < self.drag_margin: self.config(cursor="size_ns") self.drag_point = "n" elif event.y > self.height - self.drag_margin: self.config(cursor="size_ns") self.drag_point = "s" еще: self.config(курсор="") self.drag_point = Нет если __name__ == "__main__": коробка = Коробка() коробка.mainloop()
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»