В настоящее время я пытаюсь изучить tkinter в Python 3, поэтому я не уверен, что я искал ошибку, или я неправильно делаю это.
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]
У меня такая же проблема в моей системе (Ubuntu 10.10, Python 2.6), и я думаю, что это связано с диспетчером окон, а не с Tkinter. Когда я использую Openbox, у меня нет этой проблемы, и когда я использую root.overrideredirect(1), у меня тоже нет проблемы.
Что вы можете сделать, это сделать ttk.Label themed похожим на sizegrip. Привяжите его и соответствующим образом измените размер окна. Здесь окно с 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 ttk" ), и он работает. Позвольте просто надеяться, что импорт в Python 3 различен.