Bonjour tout le monde! Je me familiarise avec Tkinter et je cherche à savoir comment je peux découper une row d'un grid en plusieurs column ? Je pense que c'est pas grand chose mais je ne suis pas un pro de tkinter encore !! Merci !
Bonjour tout le monde! Je me familiarise avec Tkinter et je cherche à savoir comment je peux découper une row d'un grid en plusieurs column ? Je pense que c'est pas grand chose mais je ne suis pas un pro de tkinter encore !! Merci !
Salut,
"grid" permet de disposer des widgets sous la forme d'un tableau et les widgets ne se découpent pas: ce que vous demandez n'a pas trop de sens.
Poster un exemple de ce que vous avez essayé pourra (peut être) mieux illustrer ce que vous cherchez à faire, le problème rencontré...
- W
Salut, Merci de te réponse rapide ! En effet j'ai bien compris les principes du GRID() de Tkinter c'est pour cela que j'essaye de m'en servir car je pense que cela peut m'être utile.
Voici du code. L'idée quand tu lances, tu cliques sur le bouton et ensuite les derniers labels que j'ai mis avec le "nom :" et le "____" je voudrais les mettre l'un à côté de l'autre sur cette même ligne, mais à gauche car je voudrais en mettre plusieurs comme cela sur cette même ligne si c'est possible..
Merci de ton aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110 def ShowFrameStocker(main_win,frame): delete_frame(main_win) frame.tkraise() ############################################################################### ## Creation d'un texte Text = Label(main_win, text="premier texte", fg='DodgerBlue4', font=("Helvetica", 16, "bold"), anchor="center") Text.grid() nb_of_columns = 2 # to be replaced by the relevant number Data= Label(main_win,text="data : ", fg='black', borderwidth=2, relief="groove" ,font=("Helvetica", 9, "italic","bold"),bg =_from_rgb((252, 252, 255))) Data.grid(row=1, sticky='we', columnspan=nb_of_columns, pady = 10) # sticky='ew' expands the label horizontally comboExample = ttk.Combobox(main_win,state="readonly", width = 70) comboExample.grid() comboExample.bind("<<ComboboxSelected>>", callbackFunc) #Label DataMET = Label(main_win,text="Check data : ", fg='black', borderwidth=2, relief="groove" ,font=("Helvetica", 9, "italic","bold"),bg =_from_rgb((252, 252, 255))) DataMET.grid(row=3, sticky='we', columnspan=nb_of_columns, pady = 10) # sticky='ew' expands the label horizontally #Label Nom = Label(main_win,text="Nom : ") Nom.grid(column = 0, pady = 10) # sticky='ew' expands the label horizontally # #Label NomValue = Label(main_win,text="_____",anchor=W) NomValue.grid(row= 4,column = 1, pady = 10) # sticky='ew' expands the label horizontally if __name__ == "__main__": global main_win global first_frame global path path = os.path.dirname(os.path.realpath(__file__)) main_win = Tk() main_win.configure(bg='lavender') main_win.title("toto") main_win.geometry("680x400") ############################################################################### ## Creation d'un frame pour la page d'accueil first_frame = Frame(main_win) first_frame.place(x=0, y=0, width=500, height=500) first_frame.grid(row=1, column=0) # main_win.rowconfigure(6, weight=1) main_win.columnconfigure(0, weight=1) third_frame = Frame(main_win) third_frame.grid_forget() # label_8 = Label(second_frame, text="Welcome to page 2",width=20,font=("bold", 10)) # label_8.place(x=70,y=230) ############################################################################### ## Creation d'un bouton suivant bouton_Stocker = Button(main_win, text='Cliquez ici', command=lambda:ShowFrameStocker(main_win,third_frame), height=3, width=20) bouton_Stocker.grid(row=4, column=0) lbl1 = Label(main_win, text="Test TKinter", fg='DodgerBlue4', font=("Helvetica", 16, "bold")) lbl1.grid(row=0, column=0) main_win.mainloop()
Vous voulez les import en plus ? Désolé Je suis en train de coder dedans donc à part essayer des trucs... C'est tout ce que je fais ! Le code ci-dessus est la maquette de mon interface.
Ah oui effectivement je n'avais pas vu le def callbackFunc(), excusez moi!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 def callbackFunc(event): print("New Element Selected") print(comboExample.get())
c'est la seule fonction qu'il vous manque je crois bien. En tout cas elle me servira juste pour récupérer ce que je vais sélectionner dans ma Combobox Elle n'affecte pas le positionnement que je recherche de mes labels
Il manque aussi (au moins) deletewin...
Tester que le code que vous postez est fonctionnel, c'est pas compliqué non?
Tout à fait, c'est bien la raison pour laquelle je vous ai demandé de réduire votre code au minimum suffisant pour illustrer votre problème.
Après c'est vous qui voyez mais si vous voulez de l'aide, il va falloir apprendre à aider ce qui voudraient bien vous aider car ils n'ont peut être pas que çà à faire.
- W
Ah oui.. C'est curieux car il a fonctionné chez moi. Je pense qu'il a du garder des trucs en mémoire car ca s'exécutait très bien chez moi, donc je ne m'en suis pas rendu compte.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 def delete_frame(main_win): for widget in main_win.winfo_children(): widget.grid_forget() # Si vous utilisez .grid()
Je pense que tout y est pour le coup!
Excusez moi..
Là j'ai redémarré mon ordi, tout fonctionne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125 import os from tkinter import * import ttk def delete_frame(main_win): for widget in main_win.winfo_children(): widget.grid_forget() # Si vous utilisez .grid() def callbackFunc(event): print("New Element Selected") print(comboExample.get()) def _from_rgb(rgb): """translates an rgb tuple of int to a tkinter friendly color code """ return "#%02x%02x%02x" % rgb def ShowFrameStocker(main_win,frame): global comboExample delete_frame(main_win) frame.tkraise() ############################################################################### ## Creation d'un texte textBLK = Label(main_win, text="premier texte", fg='DodgerBlue4', font=("Helvetica", 16, "bold"), anchor="center") textBLK.grid() nb_of_columns = 2 # to be replaced by the relevant number Data = Label(main_win,text="data : ", fg='black', borderwidth=2, relief="groove" ,font=("Helvetica", 9, "italic","bold"),bg =_from_rgb((252, 252, 255))) Data.grid(row=1, sticky='we', columnspan=nb_of_columns, pady = 10) # sticky='ew' expands the label horizontally comboExample = ttk.Combobox(main_win,state="readonly", width = 70) comboExample.grid() comboExample.bind("<<ComboboxSelected>>", callbackFunc) #Label DataMET = Label(main_win,text="Check data : ", fg='black', borderwidth=2, relief="groove" ,font=("Helvetica", 9, "italic","bold"),bg =_from_rgb((252, 252, 255))) DataMET.grid(row=3, sticky='we', columnspan=nb_of_columns, pady = 10) # sticky='ew' expands the label horizontally #Label Cable = Label(main_win,text="Nom : ") Cable.grid(sticky = "w", pady = 10) # sticky='ew' expands the label horizontally # #Label CableValue = Label(main_win,text="_____",anchor=W) CableValue.grid(row= 4,sticky = "e", pady = 10) # sticky='ew' expands the label horizontally if __name__ == "__main__": global main_win global first_frame global path path = os.path.dirname(os.path.realpath(__file__)) main_win = Tk() main_win.configure(bg='lavender') main_win.title("toto") main_win.geometry("680x400") ############################################################################### ## Creation d'un frame first_frame = Frame(main_win) first_frame.place(x=0, y=0, width=500, height=500) first_frame.grid(row=1, column=0) main_win.columnconfigure(0, weight=1) third_frame = Frame(main_win) third_frame.grid_forget() ############################################################################### ## Creation d'un bouton bouton_Stocker = Button(main_win, text='Cliquez ici', command=lambda:ShowFrameStocker(main_win,third_frame), height=3, width=20) bouton_Stocker.grid(row=4, column=0) lbl1 = Label(main_win, text="Test TKinter", fg='DodgerBlue4', font=("Helvetica", 16, "bold")) lbl1.grid(row=0, column=0) main_win.mainloop()
Ligne 3 "import ttk" va planter...
Pour programmer, il faut de la rigueur...
- W
Pourquoi il va planter svp ? Je ne vois pas sincèrement
C'est 2 lib "différentes", je me suis documenté et l'import est juste il me semble
Facile!
Je lance Python et j'essaie:
Ce qui est cohérent avec ce que raconte la documentation Python.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 >>> import ttk Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named 'ttk' >>>
- W
Alors là je suis un peu confus car je n'ai pas du tout cette erreur. Ce n'est pas que je ne veuille pas vous aider mais que puis-je faire ?
Votre Python n'est plus standard.
Et si vous ne savez pas pourquoi vous vous retrouvez dans cet état "non standard", vous n'êtes pas en mesure de savoir l'étendue des changements/dégâts. Et vous risquez d'avoir des problèmes originaux que personne ne saura reproduire chez lui (ou que vous découvrirez avec une mise à jour de Python ou un changement de machine).
Dans ces conditions, la seule chose recommandable me parait être de réinstaller Python "proprement".
Pour ce qui est de votre problème initial, de toutes façons, votre code montre un avant et on ne sait pas trop ce vous cherchez à obtenir après quelle action de l'utilisateur: peut être serait-il plus simple de "dessiner" le contenu des écrans avant et après ?
- W
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager