Comment puis-je changer le fond d'une Image dans Tkinter?
J'ai été la création d'un e-Mail programme en utilisant Tkinter, en Python 3.3.
Sur différents sites, j'ai pu voir que l'Image widget peut obtenir un arrière-plan à l'aide de Frame.config(background="color")
.
Cependant, quand je l'utilise dans mes Images, il donne l'erreur suivante:
_tkinter.TclError: unknown option "-Background"
Il ne fonctionne pas dans les cas suivants:
frame = Frame(root, background="white")
Ou:
frame = Frame(root)
frame.config(bg="white")
Je ne peux pas le comprendre.
Je poste mon code source en entier mais je ne veux pas il est exposé sur internet, mais le cadre de la création va quelque chose comme ceci:
mail1 = Frame(self, relief=SUNKEN)
mail1.pack()
mail1.place(height=70, width=400, x=803, y=109)
mail1.config(Background="white")
J'ai essayé plusieurs options d'essayer de modifier l'arrière-plan. Le cadre est comme une enveloppe autour d'un aperçu des e-mails pour une boîte de réception.
En cas de besoin, ce la façon dont je suis l'importation de mes modules:
import tkinter, time, base64, imaplib, smtplib
from imaplib import *
from tkinter import *
from tkinter.ttk import *
La suite, c'est la pleine traçabilité en amont:
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"
Donne l'erreur suivante avec le code de la réponse:
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
Résolu! Merci. Ses la boîte de réception de barre à droite, à l'arrière-plan doit être blanc.
place
, pack
et grid
méthodes.Ok merci, je l'ai utilisé, puisque quelqu'un l'a utilisé dans un Tkinter, tutoriel, et c'est resté depuis. Je vais optimiser mon code pour utiliser uniquement l'endroit.
Il est préférable d'utiliser
place
ou grid
sur 99% des cas.Yep, j'ai trouvé que lors de l'utilisation de code'pack'code' je ne pouvais pas créer l'interface que je voulais.
Je pense que vous donnez certains des mauvais conseils.
place
est rarement le bon choix; les deux pack
et grid
donnent généralement de meilleurs résultats que place
. Aussi, il est bon de les mélanger dans une application, vous ne pouvez pas mélanger dans le même conteneur widget.OriginalL'auteur IPDGino | 2013-05-19
Vous devez vous connecter pour publier un commentaire.
La racine du problème est que vous êtes sans le savoir, à l'aide de la
Frame
classe à partir de lattk
paquet plutôt que de latkinter
paquet. L'un dettk
ne prend pas en charge l'option arrière-plan.C'est la principale raison pourquoi vous ne devriez pas faire importations mondiales-vous pouvez remplacer la définition des classes et des commandes.
Je recommande de faire des importations comme ceci:
Alors vous préfixe les widgets avec soit
tk
outtk
:Il devient alors instantanément évident le widget que vous utilisez, au détriment d'un tout petit peu plus de la frappe. Si vous aviez fait cela, cette erreur dans votre code ne serait jamais arrivé.
import tkinter as tk
mais je l'ai laissé tkinter, parce que j'ai été la conversion de mon programme de lâche fonctions à une classe basé sur le programme."Instantanément évident" - tk vs ttk sonne comme une source de bugs pour moi...
est une source de bugs si vous ne importations mondiales, c'est pourquoi je donne ce conseil. Avec de bonnes habitudes de programmation, il devient un non-problème.
Fantastique réponse, et la grande pêche.
OriginalL'auteur Bryan Oakley
Vous utilisez
ttk.Frame
,bg
option ne fonctionne pas pour elle. Vous devez créer style et de l'appliquer à l'image.Code avec 'bg' fonctionne très bien (python2.7 et 3.3).
Toujours obtenir la "_tkinter.TclError: option inconnue "-bg" erreur " en quelque sorte, toujours d'après le retrait de l' .pack() de tous mes cadres.
Poste à plein
import
partie de votre programme et le texte complet de l'erreur.vous ne savez pas comment la mise en forme de la section des commentaires d'œuvres, de mauvais post OP
OriginalL'auteur kalgasnik