2016-04-16 12 views
0

Ich bin relativ neu zu Tkinter und ich versuche, eine GUI mit drei horizontal ausgerichteten Eingabe-Widgets und drei entsprechende Label-Widgets zu erstellen. Ich habe Probleme damit, die Label-Widgets unterhalb der Eingabe-Widgets zu platzieren, ohne die Ausrichtung der Eingabefelder zu stören (d. H. Packseite = LEFT). Hier ist ein Beispiel Momentaufnahme der GUI ohne die Beschriftungen unter den Eingabefeldern:Tkinter Label-Widget unter Eintrag Widget

enter image description here

Derzeit mein Skript wie folgt aussieht, mit dem Label-Widgets auf Kommentar:

#!/usr/bin/python 

from sys import exit 
from Tkinter import * 
from subprocess import Popen, PIPE 
from time import sleep 
from os.path import exists 
import os 
import time 
import sys 
import ttk 

#Initialize Tkinter by creating Tk root widget, which is a window with a 
title bar. The root widget has to be created before any other widgets. 

Root = Tk() 
Root.title("GUI") 

class Command: 
    def __init__(self, func, *args, **kw): 
     self.func = func 
     self.args = args 
     self.kw = kw 
    def __call__(self, *args, **kw): 
     args = self.args+args 
     kw.update(self.kw) 
     self.func(*args, **kw) 

#Script definitions# 

def quitter(): 
    exit(0) 


#Button organization and layout# 


Sub0 = Frame(Root) 
Sub = Frame(Sub0) 

#X mesh node 
Label(Sub, text = "Create x mesh nodes").pack(side = TOP, pady = 5) 

#x min text box area 
v1=StringVar() 
#Create entry widge to get user input, in this case a text string for the x  
min mesh 

Entry(Sub, textvariable=v1).pack(side = LEFT, pady = 5, padx = 5) 
#Label(Sub, text = "min").pack(side = BOTTOM, pady = 5, padx = 5) 


#x max text box area 
v2=StringVar() 
Entry(Sub, textvariable=v2).pack(side = LEFT, pady = 5, padx = 5) 
#Label(Sub, text = "max").pack(side = BOTTOM, pady = 1) 

#x step text box area 
v3=StringVar() 
Entry(Sub, textvariable=v3).pack(side = LEFT, pady = 5, padx = 5) 
#Label(Sub, text = "step increment").pack(side = LEFT, pady = 1) 

Sub.pack(side = TOP) 
Frame(Sub0,height=1, relief = GROOVE, bg="black").pack(side = TOP, fill = 
BOTH, pady= 5) 


#GUI Organization# 


Sub0.pack(side = TOP, padx = 10) 

Button(Root, text = "Quit", command = quitter).pack(side = TOP, pady = 5) 

#The window will not appear until we enter the Tkinter event loop. Script 
will remain in the event loop until we close the window. 

Root.mainloop() 

Als ich die Kommentar- Label-Widgets ich folgendes:

enter image description here

Kann mir jemand in der r führen Wie kann man dies erreichen? Oder schlagen Sie einen besseren Weg vor, es zu implementieren? Gibt es auch eine Möglichkeit, die Größe der Eingabe-Widgets zu steuern? Ich möchte, dass sie kleiner sind. Vielen Dank im Voraus!

Antwort

2

können Sie verwenden, um die grid Geometrie-Manager für diese:

from sys import exit 
from Tkinter import * 
from subprocess import Popen, PIPE 
from time import sleep 
from os.path import exists 
import os, time, sys, ttk 

#Initialize Tkinter by creating Tk root widget, which is a window with a 
Root = Tk() 
Root.title("VIZ TOOL") 

class Command: 
    def __init__(self, func, *args, **kw): 
     self.func = func 
     self.args = args 
     self.kw = kw 
    def __call__(self, *args, **kw): 
     args = self.args+args 
     kw.update(self.kw) 
     self.func(*args, **kw) 

#Script definitions# 

def quitter(): 
    exit(0) 


#Button organization and layout# 


Sub0 = Frame(Root) 
Sub = Frame(Sub0) 

#X mesh node 
Label(Sub, text = "Create x mesh nodes").grid(columnspan=3) 

#x min text box area 
v1=StringVar() 
#Create entry widge to get user input, in this case a text string for the x  

Entry(Sub, textvariable=v1).grid(row=1, column=0) 
Label(Sub, text = "min").grid(row=2, column=0) 


#x max text box area 
v2=StringVar() 
Entry(Sub, textvariable=v2).grid(row=1, column=1) 
Label(Sub, text = "max").grid(row=2, column=1) 
#x step text box area 
v3=StringVar() 
Entry(Sub, textvariable=v3).grid(row=1, column=2) 
Label(Sub, text = "step increment").grid(row=2, column=2) 

Sub.pack(side = TOP) 
Frame(Sub0,height=1, relief = GROOVE, bg="black").pack(side = TOP, fill = 
BOTH, pady= 5) 


#GUI Organization# 


Sub0.pack(side = TOP, padx = 10) 

Button(Root, text = "Quit", command = quitter).pack(side = TOP, pady = 5) 

#The window will not appear until we enter the Tkinter event loop. Script 

Root.mainloop() 

Für die Größe der Einträge, die Sie so etwas tun kann:

Root.option_add("*Entry.Width", 5) #10 is default 

Mit der Option hinzufügen, wie dies die Größe überschreiben von allen Eintritt Widgets können Sie individuelle Größe mit dem width Schlüsselwort auf Entry(....., width = *, ...)

+0

spezifizieren Arbeitet wie ein Charme! Die einzige Sache, die nicht richtig funktioniert, ist das Label (Sub, text = "Erstelle x Mesh-Knoten"). Grid (columspan = 3). Das Etikett wird über den drei Einträgen gedruckt. – user1332577

+0

Siehe bearbeiten, denke, das ist, was du meintest Nicht sicher, was du meinst, indem du über die drei Einträge druckst – Pythonista

+0

Das hat den Trick gemacht. Vielen Dank! – user1332577

Verwandte Themen