web-dev-qa-db-ja.com

Tkinterでフレームの背景を変更するにはどうすればよいですか?

Tkinterを使用してEmailプログラムを作成しています。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.

21
IPDGino

問題の根本は、Frameパッケージからではなく、ttkパッケージからtkinterクラスを無意識に使用していることです。 ttkからのものは、バックグラウンドオプションをサポートしていません。

これがグローバルインポートを行うべきではない主な理由です。クラスとコマンドの定義を上書きできます。

このようなインポートを行うことをお勧めします。

import tkinter as tk
import ttk

次に、ウィジェットに接頭辞tkまたはttkのいずれかを付けます。

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

それから、ほんの少し入力するだけで、使用しているウィジェットがすぐにわかります。これを行っていた場合、コード内のこのエラーは発生しなかったでしょう。

32
Bryan Oakley

あなたが使う ttk.Framebgオプションは機能しません。 スタイルを作成してフレームに適用する必要があります。

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