Как изменить фон кадра в Tkinter?
Я создаю программу электронной почты, используя Tkinter, в Python 3.3.
На разных сайтах я видел, что виджет Frame может получить другой фон с помощью Frame.config(background="color")
.
Однако, когда я использую это в своих фреймах, он дает следующую ошибку:
_tkinter.TclError: unknown option "-Background"
Это не работает при выполнении следующих действий:
frame = Frame(root, background="white")
Или:
frame = Frame(root)
frame.config(bg="white")
Я не могу понять.
Я бы опубликовал весь свой исходный код, но я не хочу, чтобы он был открыт в Интернете, но создание фрейма происходит примерно так:
mail1 = Frame(self, relief=SUNKEN)
mail1.pack()
mail1.place(height=70, width=400, x=803, y=109)
mail1.config(Background="white")
Я попробовал несколько параметров, пытаясь изменить фон. Кадр похож на обход вокруг предварительного просмотра электронной почты для почтового ящика.
В случае необходимости, так я импортирую свои модули:
import tkinter, time, base64, imaplib, smtplib
from imaplib import *
from tkinter import *
from tkinter.ttk import *
Ниже приведена полная трассировка:
Traceback (most recent call last):
File "C:\Users\Wessel\Dropbox\Python\Main\Class Ginomail.py", line 457, in <module>
main()
File "C:\Users\Wessel\Dropbox\Python\Main\Class Ginomail.py", line 453, in main
app = Application(root) #start the application with root as the parent
File "C:\Users\Wessel\Dropbox\Python\Main\Class Ginomail.py", line 60, in __init__
self.initINBOX()
File "C:\Users\Wessel\Dropbox\Python\Main\Class Ginomail.py", line 317, in initINBOX
mail1.config(bg="white")
File "C:\Python33\lib\tkinter\__init__.py", line 1263, in configure
return self._configure('configure', cnf, kw)
File "C:\Python33\lib\tkinter\__init__.py", line 1254, in _configure
self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
_tkinter.TclError: unknown option "-bg"
Выдает следующую ошибку с кодом из ответа:
File "C:\Users\Wessel\Dropbox\Python\Main\Class Ginomail.py", line 317, in initINBOX
mail1 = Frame(self, relief=SUNKEN, style='myframe')
File "C:\Python33\lib\tkinter\ttk.py", line 733, in __init__
Widget.__init__(self, master, "ttk::frame", kw)
File "C:\Python33\lib\tkinter\ttk.py", line 553, in __init__
tkinter.Widget.__init__(self, master, widgetname, kw=kw)
File "C:\Python33\lib\tkinter\__init__.py", line 2075, in __init__
(widgetName, self._w) + extra + self._options(cnf))
_tkinter.TclError: Layout myframe not found
Решено! Благодарю. Его панель "Входящие" справа, фон должен быть белым.
![Happy with the results, lets work on that inbox scrolling.]()
Ответы
Ответ 1
Корень проблемы заключается в том, что вы неосознанно используете класс Frame
из пакета ttk
, а не из пакета tkinter
. Функция ttk
не поддерживает опцию фона.
Это основная причина, почему вы не должны делать глобальный импорт - вы можете перезаписать определение классов и команд.
Я рекомендую делать импорт следующим образом:
import tkinter as tk
import ttk
Затем вы префикс виджетами с помощью tk
или ttk
:
f1 = tk.Frame(..., bg=..., fg=...)
f2 = ttk.Frame(..., style=...)
Затем становится очевидным тот виджет, который вы используете, за счет всего лишь небольшого количества ввода текста. Если бы вы это сделали, эта ошибка в вашем коде никогда бы не произошла.
Ответ 2
Вы используете параметр ttk.Frame
, bg
для этого не работает. Вы должны создать стиль и применить его к кадру.
from tkinter import *
from tkinter.ttk import *
root = Tk()
s = Style()
s.configure('My.TFrame', background='red')
mail1 = Frame(root, style='My.TFrame')
mail1.place(height=70, width=400, x=83, y=109)
mail1.config()
root.mainloop()