Почему tkinter не генерирует / не вызывает исключение? - PullRequest
0 голосов
/ 07 января 2019

Проблема в том, что если вы запустите этот код ниже и измените размер окна, вы получите неожиданное поведение Виджеты не отображаются так, как они должны, и фоны есть некоторые странные цвета.

Я знаю, если вы установите аргумент, вам следует заполните его валидным значением. Если вы заполните пустую строку, как я сделал не выдается <_tkinter.TclError: неизвестное имя цвета "">.

Мой вопрос, почему мы не получите ошибку? Это ошибка tkinter? Потому что, если вы установите аргумент bg Canvas в виде пустой строки вы получите ошибку: неизвестное имя цвета ""

from tkinter import Tk, Frame, Button, Entry, Canvas

class Gui(Frame):
    def __init__(self, master):
        self.master = master
        self.font1 = font=("Segoe UI",18,"bold")
        self.font2 = font=("Segoe UI",28,"bold")
        Frame.__init__(self, self.master, bg="")
        self.grid()  
        self.create_widgets()

    def create_widgets(self):   
        self.frame_container = Frame(self, bg="")       
        self.frame_container.grid(row=0, column=0)
        self.button_test_1 = Button(self, text="Test1", bg="yellow")
        self.button_test_1.grid()
        self.can = Canvas(self.frame_container, bg="orchid1")
        self.can.grid(row=0, column=0)
        self.entry_test = Entry(self.frame_container)
        self.entry_test.grid(row=0, column=1)            

if __name__ == "__main__":
    root = Tk()
    bug_gui = Gui(root)
    root.mainloop()

1 Ответ

0 голосов
/ 07 января 2019

@ Idlehands Спасибо за цитирование объяснения effredot.org Фредрика Лунда о background. Я думаю, что наконец понял документацию Фредрика Лунда. А именно

  1. bg="" является допустимым аргументом, который будет препятствовать обновлению фона виджета Frame, и
  2. background или bg виджета Frame по умолчанию использует цвет фона приложения.

Следовательно, когда размер окна Tk изменяется, например, когда правый край окна Tk перемещается влево, чтобы достичь правого края виджета Canvas, а затем перемещается вправо в исходное положение, происходит следующее явление:

  1. Во-первых, ширина виджета Frame уменьшается в размере. Когда это происходит, я подозреваю, что фоновый цвет Tk вдовы, который заполнил виджет Frame, потерян.
  2. Во-вторых, когда ширина виджета Frame затем возвращается к исходному размеру, его фон необходимо обновить (т.е. заполнить) определенным цветом. Поскольку bg="" препятствует обновлению, то есть предотвращает заполнение фона виджета «Рамка» заданным цветом фона, фон виджета Frame по умолчанию будет иметь «цвет фона приложения». Это означает, что он будет заполнен точным цветом области непосредственно за виджетом Frame и окном Tk, как если бы он стал «прозрачным».

Отвечая на вопрос @Turjak_art, tkinter не привел к ошибке или исключению, поскольку bg="" является допустимым аргументом виджета Frame.

Edit:

Изображение, показывающее фон рамки с быстрым изменением размера.
bg=

Изображение, показывающее фон рамки с медленным изменением размера. bg=

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...