python 如何在Tkinter中更改Frame的背景?

3hvapo4f  于 2024-01-05  发布在  Python
关注(0)|答案(3)|浏览(144)

我一直在使用Tkinter在Python 3.3中创建一个 Email 程序。在不同的网站上,我看到Frame小部件可以使用Frame.config(background="color")获得不同的背景。然而,当我在我的Frames中使用它时,它给出了以下错误:

  1. _tkinter.TclError: unknown option "-Background"

字符串
在执行以下操作时不起作用:

  1. frame = Frame(root, background="white")


或者:

  1. frame = Frame(root)
  2. frame.config(bg="white")


我想不明白。我会发布我的整个源代码,但我不希望它暴露在互联网上,但框架的创建是这样的:

  1. mail1 = Frame(self, relief=SUNKEN)
  2. mail1.pack()
  3. mail1.place(height=70, width=400, x=803, y=109)
  4. mail1.config(Background="white")


我已经尝试了多种选择试图修改背景。框架就像一个包裹周围的电子邮件预览的收件箱。
如果需要,这是我导入模块的方式:

  1. import tkinter, time, base64, imaplib, smtplib
  2. from imaplib import *
  3. from tkinter import *
  4. from tkinter.ttk import *


以下是完整的traceback:

  1. Traceback (most recent call last):
  2. File "C:\Users\Wessel\Dropbox\Python\Main\Class Ginomail.py", line 457, in <module>
  3. main()
  4. File "C:\Users\Wessel\Dropbox\Python\Main\Class Ginomail.py", line 453, in main
  5. app = Application(root) #start the application with root as the parent
  6. File "C:\Users\Wessel\Dropbox\Python\Main\Class Ginomail.py", line 60, in __init__
  7. self.initINBOX()
  8. File "C:\Users\Wessel\Dropbox\Python\Main\Class Ginomail.py", line 317, in initINBOX
  9. mail1.config(bg="white")
  10. File "C:\Python33\lib\tkinter\__init__.py", line 1263, in configure
  11. return self._configure('configure', cnf, kw)
  12. File "C:\Python33\lib\tkinter\__init__.py", line 1254, in _configure
  13. self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
  14. _tkinter.TclError: unknown option "-bg"


给出下面的错误和答案中的代码:

  1. File "C:\Users\Wessel\Dropbox\Python\Main\Class Ginomail.py", line 317, in initINBOX
  2. mail1 = Frame(self, relief=SUNKEN, style='myframe')
  3. File "C:\Python33\lib\tkinter\ttk.py", line 733, in __init__
  4. Widget.__init__(self, master, "ttk::frame", kw)
  5. File "C:\Python33\lib\tkinter\ttk.py", line 553, in __init__
  6. tkinter.Widget.__init__(self, master, widgetname, kw=kw)
  7. File "C:\Python33\lib\tkinter\__init__.py", line 2075, in __init__
  8. (widgetName, self._w) + extra + self._options(cnf))
  9. _tkinter.TclError: Layout myframe not found


解决了!谢谢。它的收件箱栏的权利,背景需要是白色。x1c 0d1x

pvabu6sv

pvabu6sv1#

问题的根源是你在不知不觉中使用了ttk包中的Frame类,而不是tkinter包中的Frame类。ttk包中的Frame类不支持后台选项。
这就是为什么不应该执行JavaScript导入的主要原因--您可能会覆盖类和命令的定义。
我建议像这样进行导入:

  1. import tkinter as tk
  2. import ttk

字符串
然后,您可以使用tkttk作为小部件的前缀:

  1. f1 = tk.Frame(..., bg=..., fg=...)
  2. f2 = ttk.Frame(..., style=...)


这样你就可以立即知道你使用的是哪一个小部件了,只要多输入一点内容就行了。如果你这样做了,代码中的这个错误就永远不会发生。

oo7oh9g9

oo7oh9g92#

您使用ttk.Framebg选项不适用于它。You should create style and apply it to the frame.

  1. from tkinter import *
  2. from tkinter.ttk import *
  3. root = Tk()
  4. s = Style()
  5. s.configure('My.TFrame', background='red')
  6. mail1 = Frame(root, style='My.TFrame')
  7. mail1.place(height=70, width=400, x=83, y=109)
  8. mail1.config()
  9. root.mainloop()

字符串

kq4fsx7k

kq4fsx7k3#

不是最有经验的。但是...

  1. import tkinter as tk
  2. app = tk.Tk()
  3. mail1 = app.Frame(root, relief=SUNKEN, background="white", height=70, width=400)
  4. mail1.pack()
  5. mail1.place(x=803, y=109)
  6. app.mainloop()

字符串
是为我工作,确保你有最新的python和tkinter

相关问题