Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
pythontk使用bind动态调整帧大小_Python_Python 3.x_Tkinter - Fatal编程技术网

pythontk使用bind动态调整帧大小

pythontk使用bind动态调整帧大小,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我正在尝试创建一个GUI前端,以使用python tk inter显示一些数据 我有一个框架,其中依次有其他小部件,如按钮和列表框等。 每当光标被放置在框架的边界上时,我都会尝试动态地增加/减少框架,就像我们在用户端的普通窗口上所做的那样 我已经讨论了相同的绑定函数。 但看起来我错过了什么 def left_click(event): tkinter.Label(Frame1, text = "Left Click!").pack() self.Frame1 = Fra

我正在尝试创建一个GUI前端,以使用python tk inter显示一些数据

我有一个框架,其中依次有其他小部件,如按钮和列表框等。 每当光标被放置在框架的边界上时,我都会尝试动态地增加/减少框架,就像我们在用户端的普通窗口上所做的那样

我已经讨论了相同的绑定函数。 但看起来我错过了什么

  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的新手。

您需要绑定以下鼠标事件以执行帧大小调整:

按下鼠标左键以确定是否应根据鼠标位置开始调整大小 释放鼠标左键停止调整大小 如果按下鼠标开始调整大小,则在框架内移动鼠标以执行调整大小 下面是一个示例代码:

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()

您需要绑定以下鼠标事件以执行帧大小调整:

按下鼠标左键以确定是否应根据鼠标位置开始调整大小 释放鼠标左键停止调整大小 如果按下鼠标开始调整大小,则在框架内移动鼠标以执行调整大小 下面是一个示例代码:

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()

您发布的代码根本没有尝试调整您所说的目标帧大小,因此很难准确地说出您需要帮助的内容。为什么您认为您缺少了一些东西?程序所做的与您期望的不同之处是什么?Bryan Oakley我无法找出正确的绑定函数。你能给我提供一些相关的链接或文档吗?你发布的代码根本没有尝试调整框架大小,你说这是你的目标,所以很难说清楚你需要什么帮助。为什么你认为你遗漏了什么?程序所做的与您期望的不同之处是什么?Bryan Oakley我无法找出正确的绑定函数。你能给我提供一些相关的链接或文档吗?非常感谢。太完美了。样品太棒了@回答得很好。如果你想做一些收尾工作,你可以看看。更具体地说,是更改光标大小的方法。它有Linux和Windows的光标名称。acw1668非常感谢。太完美了。样品太棒了@回答得很好。如果你想做一些收尾工作,你可以看看。更具体地说,是更改光标大小的方法。它具有Linux和Windows的光标名称。