Изменение заголовка tkinter - борьба с привязкой событий и функциями - PullRequest
0 голосов
/ 25 января 2020

Я пытаюсь изменить цвет моей рамки заголовка 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)

Это может быть очевидно, но я не знаю, что на самом деле сделал этот человек. Я перепробовал множество вариантов отступов размещение функций в разных разделах - должны ли функции всегда быть в самом начале? Я думаю, что это лучшая версия того, что я имитировал в своем собственном. У меня есть окно с другим цветом и буквой «х» в правом верхнем углу Это окно закрывается. Однако окно не перемещается, и я получаю ошибку:

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

Идея также показывает, что ywin, xwin, startx и starty не распознаются или серые, как они не 'работает после линии starty = event.y_Text_input_window

1 Ответ

0 голосов
/ 25 января 2020

Сначала нужно решить 2 проблемы.

  1. Я думаю, вы неправильно поняли этот атрибут event.x_ root. x_ root не было, потому что окно root было названо 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()

Результаты:

enter image description here

...