Das Fenster sieht so aus: Hauptansicht. Das Problem tritt auf, wenn ich versuche, die Größe zu ändern. Ich möchte, dass es weiterhin wie folgt minimiert werden kann:Minimierte Ansicht, aber wenn ich es dehne, entsteht zwischen labelFrame und addressFrame viel Leerraum, den ich nicht möchte: Maximierte Ansicht
Ich möchte, dass labelFrame zusammen mit addressFrame verkürzt wird, wenn ich das Fenster minimiere, aber beim Erweitern möchte ich, dass die Größe geändert wird nur bis zu einer bestimmten Breite (längste Etikettenlänge + ein paar Pixel), während addressFrame (im Grunde nur die Dateiadresse im Eintrag) weiter expandiert. Es scheint, dass ich nur das eine oder das andere haben kann: Entweder ist die Breite von labelFrame vollständig festgelegt und wird nicht minimiert, bis addressFrame aus der Ansicht verschwindet, wenn ich den Mainframe bewege, oder durch Dehnen entsteht zusätzlicher Platz.
Bitte helfen Sie.
Hier ist der Code:
Code: Select all
from tkinter import * # from tkinter import Tk for Python 3.x
from tkinter import ttk
from tkinter import filedialog
def validateInputs(): #placeholder
return True
def calculate(): #placeholder
return True
class FileSelect(Frame):
def __init__(self,parent=None,**kw):
Frame.__init__(self,master=parent,**kw)
self.filePath = StringVar()
self.entPath = Entry(self, width=50, textvariable=self.filePath)
self.entPath.grid(row=0,column=0,sticky='nsew')
self.btnFind = ttk.Button(self, text="...",command=self.setFolderPath)
self.btnFind.grid(row=0,column=1,sticky='e')
def setFolderPath(self):
file_selected = filedialog.askopenfilename() # show an "Open" dialog box and return the path to the selected file
self.filePath.set(file_selected)
@property
def file_path(self):
return self.filePath.get()
class labelFrame(ttk.Frame):
def __init__(self, container):
super().__init__(container)
# setup the grid layout manager
self.columnconfigure(0, weight=1)
self.__create_widgets()
def __create_widgets(self):
ttk.Label(self, text='Choose file 1 with the main data:').grid(column=0, row=0, sticky='ew')
ttk.Label(self, text='Choose file 2 for verification:').grid(column=0, row=1, sticky='ew')
for widget in self.winfo_children():
widget.grid(padx=0, pady=5)
class addressFrame(ttk.Frame):
def __init__(self, container):
super().__init__(container)
# setup the grid layout manager
self.columnconfigure(0, weight=3)
self.__create_widgets()
def __create_widgets(self):
file1 = FileSelect(self)
file1.grid(row=0, sticky='nsew')
file1.columnconfigure(0, weight=3)
file2 = FileSelect(self)
file2.grid(row=1, sticky='nsew')
file2.columnconfigure(0, weight=3)
for widget in self.winfo_children():
widget.grid(padx=0, pady=3)
#main module
gui = Tk()
gui.title("TEST")
gui.columnconfigure(0, weight=1)
gui.rowconfigure(0, weight=1)
gui.minsize(400, 100)
mainframe = ttk.Frame(gui, height=600, padding=(3, 3, 12, 12))
mainframe.grid(column=0, row=0, sticky='nsew')
mainframe.columnconfigure(0, weight=1)
mainframe.columnconfigure(1, weight=1)
# create the label frame
label_frame = labelFrame(mainframe)
label_frame.grid(column=0, row=0, sticky='nswe')
label_frame.columnconfigure(0, weight=1)
# create the frame w file address entry and button
address_frame = addressFrame(mainframe)
address_frame.grid(column=1, row=0, sticky='nswe')
address_frame.columnconfigure(0, weight=3)
valBtn = ttk.Button(mainframe, text="Validate inputs", command = validateInputs)
valBtn.grid(column=3, row=2, padx=5, pady=5, sticky='e')
valBtn.state(['disabled'])
btn = ttk.Button(mainframe, text="(Re)calculate", command = calculate)
btn.grid(column=3, row=3, padx=5, pady=5, sticky='e')
btn.state(['disabled'])
for child in mainframe.winfo_children():
child.grid_configure(padx=5, pady=5)
gui.mainloop()
Mobile version