我目前正在尝试在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]
答案 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中的导入完全不同。