tkinter.tk.Sizegrip中的奇怪行为

时间:2011-06-01 22:34:10

标签: python tkinter

我目前正在尝试在Python 3中学习tkinter,所以我不确定我是在查看错误还是我没有正确处理。

from tkinter import *
from tkinter import ttk

root = Tk()
grip = ttk.Sizegrip(root).grid(column=0, row=0, sticky=(S,E))
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
root.mainloop()

当抓住Sizegrip时,整个窗口快速移动(比鼠标指针移动的速度快)到屏幕底部。窗口正在适当调整大小,但整个窗口的移动并不是我所期望的。 [我正在使用Ubuntu 10.04和Python 3.1.2]

1 个答案:

答案 0 :(得分:1)

我的系统(Ubuntu 10.10,Python 2.6)存在同样的问题,我认为它与窗口管理器有关,而不是Tkinter。当我使用Openbox时,我没有问题,当我使用root.overrideredirect(1)时,我也没有问题。

你可以做的是制作一个ttk.Label主题看起来像一个sizegrip。将其绑定到窗口并相应调整窗口大小。这是一个带有尺寸夹的窗口:

from tkinter import *
from tkinter import ttk

#
# Callbacks:
#
# Change "bottom_right_corner" to "size_nw_se" and
# "arrow" to "left_ptr" if running on Windows.
#

def button_press(event):
    sizegrip["cursor"] = "bottom_right_corner"

def resize(event):
    deltax = event.x_root - root.winfo_rootx()
    deltay = event.y_root - root.winfo_rooty()
    if deltax < 1:
        deltax = 1
    if deltay < 1:
        deltay = 1
    root.geometry("%sx%s" % (deltax, deltay))

def button_release(event):
    sizegrip["cursor"] = "arrow"

# Widget Creation
root = Tk()                    
sizegrip = ttk.Label(root, style="Sizer.TLabel")

# Styling
style = ttk.Style()
style.layout("Sizer.TLabel", [("Sizegrip.sizegrip",
                               {"side": "bottom", "sticky": "se"})])

# Geometry Management
sizegrip.pack(side="bottom", anchor="se")

# Bindings
sizegrip.bind("<ButtonPress-1>", button_press)
sizegrip.bind("<B1-Motion>", resize)
sizegrip.bind("<ButtonRelease-1>", button_release)

root.mainloop()

我已经习惯了Python 2,很抱歉,如果我对语法有点搞砸了。我用Python 2导入测试它(“来自Tkinter import *”和“import ttk”)并且它可以工作。我们只希望Python 3中的导入完全不同。