Tkinter - 使用绑定动态调整框架大小 [英] Tkinter - Using bind to resize frame dynamically
问题描述
我正在尝试创建一个 GUI 前端来使用 python tkinter 显示一些数据.
I am trying to create a GUI front-end to display some data using python tkinter.
我有一个框架,它又包含其他小部件,例如按钮和列表框等.每当光标放置在框架的边界上时,我都会尝试动态增加/减少框架,就像我们在用户端的通常窗口上所做的一样.
I have a Frame which in-turn has other widgets like, button and list-box etc. I am trying to dynamically increase/decrease the frame whenever the cursor is placed on borders of frame just like we do on usual windows from user end.
我已经完成了相同的绑定函数.但看起来我错过了什么.
I have gone through the binding functions for the same. but looks like I am missing on something.
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 的新手.
I am new to python tk inter.
推荐答案
需要绑定以下鼠标事件来进行frame resize:
You need to bind the following mouse events to perform frame resize:
(鼠标左键按下)根据鼠标位置决定是否开始调整大小
(松开鼠标左键)停止调整大小
(鼠标在帧内移动)如果通过按下鼠标开始调整大小,则执行调整大小
<ButtonPress-1>
(mouse left button pressed) to determine whether resize should be started based on mouse position<ButtonRelease-1>
(mouse left button released) to stop resize<Motion>
(mouse moving within frame) to perform resize if resize is started by mouse pressed
以下是示例代码:
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()
这篇关于Tkinter - 使用绑定动态调整框架大小的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!