Beschränken Sie die Größenänderung von Frames in Tkinter, sodass diese weiterhin minimiert, aber nur auf eine bestimmte Python

Python-Programme
Anonymous
 Beschränken Sie die Größenänderung von Frames in Tkinter, sodass diese weiterhin minimiert, aber nur auf eine bestimmte

Post by Anonymous »

Ich versuche mit tkinter eine einfache App in Python zu erstellen. Es enthält zwei Zeilen für die Dateiauswahl (Spalte mit Beschriftungen auf Frame1, labelFrame, und Spalte mit Eintrags- und Schaltflächenpaaren auf einem zweiten Frame, addressFrame) sowie zwei Schaltflächen in der unteren rechten Ecke, die für diesen Beitrag nur Platzhalter sind, die ich für das gesamte Layout beibehalten habe.
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()

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post