首页 > 解决方案 > tkinter 标题框架更改 - 与事件绑定和函数作斗争

问题描述

我正在尝试更改 tkinter 标题框的颜色。我正在使用此处找到的结构我可以更改 Tkinter 中的标题栏吗?

我有几个问题。我一直在修改代码并研究可能的解决方案,但感觉很卡。

Text_input_window= Tk()

def get_pos(event):
    xwin = Text_input_window.winfo_x()
    ywin = Text_input_window.winfo_y()
    startx = event.x_Text_input_window
    starty = event.y_Text_input_window

    ywin = ywin - starty
    xwin = xwin - startx


def move_window(event):
    Text_input_window.geometry("400x400"+'+{0}+{1}'.format(event.x_Text_input_window, event.y_Text_input_window))
    startx = event.x_Text_input_window
    starty = event.y_Text_input_window


Text_input_window.bind('<B1-Motion>', move_window)
Text_input_window.bind('<Button-1>', get_pos)

Text_input_window.overrideredirect(True) #removes default settings in Text_input_window
Text_input_window.geometry('460x250+300+200')

title_bar=Frame(Text_input_window, bg='SteelBlue1', relief='raised', bd=2)

这可能很明显,但我真的不知道这个人做了什么。我已经尝试了许多将函数放在不同部分的缩进排列 - 函数应该总是在最开始吗?我认为这是我模仿的最好的版本。我得到一个颜色不同的窗口,右上角有一个“x”,它会自动关闭。但是窗口没有移动,我得到的错误是:

startx = event.x_Text_input_window
AttributeError: 'Event' object has no attribute 'x_Text_input_window'

ide 还显示 ywin、xwin、startx 和 starty 无法识别或显示为灰色,就像它们在下线后无法工作一样starty = event.y_Text_input_window

标签: functioneventstkinterframetitle

解决方案


您需要先解决 2 个问题。

  1. 我想你误解了这个属性 event.x_root。x_root 不是因为根窗口在另一篇文章中被命名为 root。这只是属性名称,无论您如何称呼您的根窗口。所以使用event.x_root而不是event.x_Text_input_window.

  2. 您需要将框架实际放置在窗口上。如果您在该框架中没有任何小部件,您将需要定义一个高度,以便您可以在窗口上实际看到它。

这是您的代码的工作版本:

import tkinter as tk


text_input_window = tk.Tk()


def get_pos(event):
    xwin = text_input_window.winfo_x()
    ywin = text_input_window.winfo_y()
    startx = event.x_root
    starty = event.y_root

    ywin = ywin - starty
    xwin = xwin - startx


def move_window(event):
    text_input_window.geometry("400x400"+'+{0}+{1}'.format(event.x_root, event.y_root))
    startx = event.x_root
    starty = event.y_root


text_input_window.overrideredirect(True)
text_input_window.geometry('460x250+300+200')
text_input_window.columnconfigure(0, weight=1)

title_bar = tk.Frame(text_input_window, height=25, bg='SteelBlue1', relief='raised', bd=5)
title_bar.grid(row=0, column=0, sticky='ew')


text_input_window.bind('<B1-Motion>', move_window)
text_input_window.bind('<Button-1>', get_pos)
text_input_window.mainloop()

结果:

在此处输入图像描述


推荐阅读