【问题标题】:Why can't I drag a custom made title bar from a place where there is a label? And how to do it?为什么我不能从有标签的地方拖动自定义标题栏?怎么做?
【发布时间】:2021-05-21 12:18:11
【问题描述】:

我在 tkinter 中创建了一个 overrideredirected 根窗口,但是当我尝试从我放置标签的特定位置拖动 title_bar(我创建的)时似乎出现了问题

from tkinter import Tk, Label, Button, Frame

这些功能基本上都是用来移动窗口的,没有别的

x_cor, y_cor = 0, 0


def start_move(event):
    global x_cor, y_cor
    x_cor = event.x
    y_cor = event.y


def stop_move(_):
    global x_cor, y_cor
    x_cor = None
    y_cor = None


def do_move(event):
    global x_cor, y_cor
    deltax = event.x - x_cor
    deltay = event.y - y_cor
    x = root.winfo_x() + deltax
    y = root.winfo_y() + deltay
    root.geometry(f"+{x}+{y}")

这是主程序

root = Tk()
root.overrideredirect(1)
root.geometry('500x500')
title = Frame(root, bg='pink')
title.pack(fill='x')

label = Label(title, text='Title of my program',bg='black', fg='white', anchor='c')
label.place(x=200, y=0)

close = Button(title, text='X', fg='white', bg='red', command=root.destroy)
close.pack(side='right')

title.bind("<ButtonPress-1>", lambda events: start_move(events))
title.bind("<ButtonRelease-1>", lambda events: stop_move(events))
title.bind("<B1-Motion>", lambda events: do_move(events))

root.mainloop()

当我在除label 所在的空间之外的任何其他位置按住鼠标按钮时,标题栏移动得很好。有没有办法解决这个问题?

换句话说,我可以以某种方式“克服”标签并将标题栏从我想要的任何地方拖动吗?

提前致谢!

【问题讨论】:

  • 对于这个问题,这是来自 TheLizzard stackoverflow.com/questions/66968676/… 的一个很好的解决方案
  • 如果要移动标题栏包含标签,bind标签
  • 我不知道您提供的链接与我的问题有什么关系,但无论如何我解决了我的绑定问题
  • @Thalis 如果您想创建自己的标题栏,请查看this。这是相当多的代码,但如果你愿意,你可以删除所有不必要的部分。
  • @TheLizzard 我做了一个看起来不错的,谢谢你的建议

标签: python tkinter tkinter-label


【解决方案1】:

解决方案是将 title_bar 内的任何小部件与移动功能绑定。 在这种情况下,像这样:

label.bind("<ButtonPress-1>", lambda events: start_move(events))
label.bind("<ButtonRelease-1>", lambda events: stop_move(events))
label.bind("<B1-Motion>", lambda events: do_move(events))

【讨论】:

  • 你知道你可以用.bind(..., start_move)代替.bind(..., lambda events: start_move(events))。其他绑定也是如此。
猜你喜欢
  • 1970-01-01
  • 2012-02-12
  • 2010-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多