3
votes

Définition de la couleur d'arrière-plan d'un cadre tkinter ttk

Je veux simplement définir une couleur d'arrière-plan pour le cadre dans la fenêtre tkinter. La couleur d'arrière-plan de la fenêtre a été définie avec succès, mais pas pour le cadre à l'intérieur. Le simple fait de saisir bg = 'color_name ou color_code' ne fonctionne pas.

Comment définir la couleur d'arrière-plan d'un cadre ttk?

En plus de cela, existe-t-il une méthode pour modifier également d'autres options de widget, c'est-à-dire la couleur, les polices de la barre d'onglets? p >

J'ai essayé d'utiliser la commande bg = 'Color_name ou color_code' et j'ai également essayé d'utiliser frame_name = config (bg = 'color_name or color_code'). Aucun des deux n'a fonctionné.

from tkinter import * 
from tkinter import ttk 


window = Tk() 
window.title("Title Name") 
window.config(bg='#FFFAFA')
window.geometry('1024x800')


menubar = Menu(window) 
filemenu = Menu(menubar,tearoff=0)
menubar.add_cascade(label='File',menu=filemenu)
filemenu.add_command(label='Open')
filemenu.add_command(label='Clear')
filemenu.add_command(label='Save As')
filemenu.add_separator()
filemenu.add_command(label='Exit')


helpmenu = Menu(menubar,tearoff=0)
menubar.add_cascade(label='Help',menu=helpmenu)
helpmenu.add_command(label='Precuations')
helpmenu.add_command(label='Version Info')
helpmenu.add_command(label='Technical Support')

window.config(menu=menubar)

rows = 0
while rows<50:
    window.rowconfigure(rows,weight=1)
    window.columnconfigure(rows, weight=1)
    rows +=1

#creation of frame
mainframe = ttk.Notebook(window,width=50)
mainframe.grid(row=1,column=2,columnspan=45,rowspan=43,sticky='NESW')

#create tabs within the frame
tab1 = ttk.Frame(mainframe)
mainframe.add(tab1, text="Tab1")


tab2 = ttk.Frame(mainframe)
mainframe.add(tab2, text="Tab2")


tab3 = ttk.Frame(mainframe)
mainframe.add(tab3, text="Tab3")

tab4 = ttk.Frame(mainframe)
mainframe.add(tab4, text="Tab4")

tab5 = ttk.Frame(mainframe)
mainframe.add(tab5, text="Tab4")

window.mainloop()


0 commentaires

3 Réponses :


3
votes

Vous utilisez des widgets ttk dont les options de style sont regroupées dans des styles. Ainsi, pour les widgets ttk, vous ne pouvez pas modifier directement des options de style telles que bgcolor. Vous devez modifier ou créer de nouveaux styles. Plus d'informations à ce sujet ici: http: // infohost.nmt.edu/tcc/help/pubs/tkinter/web/ttk-style-layer.html

Changez votre code comme ceci pour afficher une nouvelle couleur:

# create frame style
s = ttk.Style()
s.configure('new.TFrame', background='#7AC5CD')

#create tabs within the frame
tab1 = ttk.Frame(mainframe, style='new.TFrame')
mainframe.add(tab1, text="Tab1")


tab2 = ttk.Frame(mainframe, style='new.TFrame')
mainframe.add(tab2, text="Tab2")


tab3 = ttk.Frame(mainframe, style='new.TFrame')
mainframe.add(tab3, text="Tab3")

tab4 = ttk.Frame(mainframe, style='new.TFrame')
mainframe.add(tab4, text="Tab4")

tab5 = ttk.Frame(mainframe, style='new.TFrame')
mainframe.add(tab5, text="Tab4")


1 commentaires

Merci beaucoup pour votre réponse. La technique a fonctionné et le problème a été résolu. Les cadres affichent maintenant la couleur d'arrière-plan définie.



4
votes

Lors de l'utilisation des widgets ttk , tout le style doit être fait en utilisant ttk.Style .

Vous devez initialiser la classe de style avec s = ttk. Style () , et peut ensuite changer les attributs des différents styles de widgets avec s.configure ('StyleName', option = 'value')

Vous pouvez trouver les noms de style par défaut ici . Donc, pour un Frame , le nom du style est TFrame . Lorsque vous configurez une option pour ce style, elle sera utilisée par tous les cadres. Lorsque vous souhaitez configurer une option pour un seul cadre, vous pouvez créer un nouveau style basé sur le style d'origine en utilisant un nom de la forme newName.oldName . Dans votre cas, cela pourrait être Frame1.TFrame . Vous pouvez alors dire à un cadre d'utiliser ce style en passant style='Frame1.TFrame'.

Si vous utilisez ce qui suit dans votre code, vous verrez que le premier cadre est rouge, le second est bleu et tous les autres cadres sont verts:

# Initialize style
s = ttk.Style()
# Create style used by default for all Frames
s.configure('TFrame', background='green')

# Create style for the first frame
s.configure('Frame1.TFrame', background='red')
# Use created style in this frame
tab1 = ttk.Frame(mainframe, style='Frame1.TFrame')
mainframe.add(tab1, text="Tab1")

# Create separate style for the second frame
s.configure('Frame2.TFrame', background='blue')
# Use created style in this frame
tab2 = ttk.Frame(mainframe, style='Frame2.TFrame')
mainframe.add(tab2, text="Tab2")


1 commentaires

Merci beaucoup pour ton soutien! Le problème a été résolu. Cette technique a fonctionné et les cadres affichent maintenant la couleur d'arrière-plan comme définie. En outre, le lien partagé est d'obtenir de l'aide et je vais essayer de personnaliser d'autres widgets également dans l'interface graphique.



0
votes

Veuillez suivre l'étape ci-dessous

  1. Créer un objet de classe de style

    s = ttk.Style ()

  2. Utiliser cet objet pour définir le style

  3. Premier argument: nom du style, ce nom est placé dans tous les cadres où vous voulez donner ce style

    s.configure ('frameName', background = '# fff')

  4. Créez un cadre et attribuez ce style

    frm1 = ttk.Frame (racine, style = 'frameName')


1 commentaires

Veuillez ajouter quelques balises à votre question, afin qu'elle soit plus consultable pour les experts de ce sujet. Essayez également d'expliquer votre problème avec plus de détails et des extraits si nécessaire.