it-swarm.com.de

Wie ändere ich den Hintergrund eines Frames in Tkinter?

Ich habe mit Tkinter ein Email - Programm erstellt, in Python 3.3. Auf verschiedenen Sites habe ich festgestellt, dass das Frame-Widget mit der Funktion Frame.config(background="color"). Wenn ich dies jedoch in meinen Frames verwende, wird der folgende Fehler angezeigt:

_tkinter.TclError: unknown option "-Background"

Es funktioniert nicht, wenn Sie Folgendes tun:

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

Oder:

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

Ich kann es nicht herausfinden. Ich würde meinen gesamten Quellcode posten, aber ich möchte nicht, dass er im Internet veröffentlicht wird, aber die Rahmenerstellung sieht ungefähr so ​​aus:

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

Ich habe mehrere Optionen ausprobiert, um den Hintergrund zu ändern. Der Rahmen ist wie ein Umlauf um eine E-Mail-Vorschau für einen Posteingang.

Im Bedarfsfall importiere ich meine Module folgendermaßen:

import tkinter, time, base64, imaplib, smtplib
from imaplib import *
from tkinter import *
from tkinter.ttk import *

Das Folgende ist der vollständige Traceback:

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"

Gibt den folgenden Fehler mit dem Code aus der Antwort:

  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

Gelöst! Vielen Dank. Es ist die Eingangsleiste rechts, der Hintergrund musste weiß sein. Happy with the results, lets work on that inbox scrolling.

21
IPDGino

Die Wurzel des Problems ist, dass Sie unwissentlich die Klasse Frame aus dem Paket ttk und nicht aus dem Paket tkinter verwenden. Die von ttk unterstützt die Hintergrundoption nicht.

Dies ist der Hauptgrund, warum Sie keine globalen Importe durchführen sollten - Sie können die Definition von Klassen und Befehlen überschreiben.

Ich empfehle folgende Importe:

import tkinter as tk
import ttk

Dann stellen Sie den Widgets entweder tk oder ttk voran:

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

Es wird dann sofort klar, welches Widget Sie verwenden, und dies auf Kosten einer geringfügig höheren Typisierung. Wenn Sie dies getan hätten, wäre dieser Fehler in Ihrem Code niemals aufgetreten.

32
Bryan Oakley

Sie verwenden ttk.Frame, Die Option bg funktioniert nicht. Sie sollten einen Stil erstellen und ihn auf den Rahmen anwenden.

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()
9
kalgasnik