我在Python 3.3中使用Tkinter创建了一个 Email 程序。
在各种网站上,我一直看到Frame小部件可以使用Frame.config(background="color")
获得不同的背景。
但是,当我在我的Frames中使用它时,会出现以下错误:
_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
解决!谢谢。它的收件箱栏位于右侧,背景需要为白色。
答案 0 :(得分:28)
问题的根源在于您在不知情的情况下使用Frame
包中的ttk
类而不是tkinter
包。来自ttk
的那个不支持后台选项。
这是您不应该进行全局导入的主要原因 - 您可以覆盖类和命令的定义。
我建议像这样进口:
import tkinter as tk
import ttk
然后,您可以使用tk
或ttk
:
f1 = tk.Frame(..., bg=..., fg=...)
f2 = ttk.Frame(..., style=...)
然后,您可以立即明白您正在使用哪个小部件,而不仅仅是更多的打字。如果你这样做了,代码中的这个错误就永远不会发生。
答案 1 :(得分:9)
您使用ttk.Frame
,bg
选项不起作用。 You should create style and apply it to the frame.
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()