странное поведение в tkinter.tk.Sizegrip

1

В настоящее время я пытаюсь изучить 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]

Теги:
tkinter

1 ответ

1

У меня такая же проблема в моей системе (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 различен.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню