Python Tk inter - Использование связывания для динамического изменения размера фрейма - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь создать интерфейс GUI для отображения некоторых данных, используя python tk inter.

У меня есть фрейм, в котором, в свою очередь, есть другие виджеты, такие как кнопка, список и т.д. Япытаясь динамически увеличивать / уменьшать фрейм всякий раз, когда курсор находится на границах фрейма, как мы делаем в обычных окнах со стороны пользователя.

enter image description here

Я прошел через те же функции привязки.но похоже, что мне чего-то не хватает.

  def left_click(event):
      tkinter.Label(Frame1, text = "Left Click!").pack()



  self.Frame1 = Frame(top)        
  self.Frame1.place(relx=0.01, rely=0.152, relheight=0.678 , relwidth=0.98)
  self.Frame1.configure(relief=GROOVE)
  self.Frame1.configure(borderwidth="10")
  self.Frame1.configure(relief=GROOVE)
  self.Frame1.configure(background="#D1C8E6")
  self.Frame1.configure(width=900)
  self.Frame1.configure(highlightthickness="4")
  self.Frame1.bind("<Button-1>", left_click)

Я новичок в python tk inter.

1 Ответ

0 голосов
/ 19 февраля 2019

Вам необходимо привязать следующие события мыши для выполнения изменения размера кадра:

  • <ButtonPress-1> (нажатие левой кнопки мыши), чтобы определить, следует ли запускать изменение размера на основе положения мыши
  • <ButtonRelease-1> (нажатие левой кнопки мыши), чтобы остановить изменение размера
  • <Motion> (перемещение мыши в пределах рамки) для выполнения изменения размера, если изменение размера запускается при нажатии мыши

Ниже приведенопример кода:

from tkinter import *

HORIZONTAL = 1
VERTICAL   = 2

class App:
    def __init__(self, top):
        self.Frame1 = Frame(top, bd=5, relief='raised', width=100, height=100)
        self.Frame1.place(x=10, y=10)
        self.Frame1.bind("<ButtonPress-1>", self.start_resize)
        self.Frame1.bind("<ButtonRelease-1>", self.stop_resize)
        self.Frame1.bind("<Motion>", self.resize_frame)
        self.resize_mode = 0
        self.cursor = ''

    def check_resize_mode(self, x, y):
        width, height = self.Frame1.cget('width'), self.Frame1.cget('height')
        mode = 0
        if x > width-10: mode |= HORIZONTAL    
        if y > height-10: mode |= VERTICAL
        return mode

    def start_resize(self, event):
        self.resize_mode = self.check_resize_mode(event.x, event.y)

    def resize_frame(self, event):
        if self.resize_mode:
            if self.resize_mode & HORIZONTAL:
                self.Frame1.config(width=event.x)
            if self.resize_mode & VERTICAL:
                self.Frame1.config(height=event.y)
        else:
            cursor = 'size' if self.check_resize_mode(event.x, event.y) else ''
            if cursor != self.cursor:
                self.Frame1.config(cursor=cursor)
                self.cursor = cursor

    def stop_resize(self, event):
        self.resize_mode = 0

root = Tk()
root.geometry("800x600+400+50")
App(root)
root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...