Ограничьте изменение размера фрейма в Tkinter, чтобы его можно было свернуть, но максимизировать только до определенной Python

Программы на Python
Ответить
Anonymous
 Ограничьте изменение размера фрейма в Tkinter, чтобы его можно было свернуть, но максимизировать только до определенной

Сообщение Anonymous »

Я пытаюсь создать простое приложение на Python с помощью tkinter. Оно содержит две строки для выбора файла (столбец меток в фрейме 1, labelFrame и столбец пар записей и кнопок во втором фрейме, addressFrame), а также две кнопки в правом нижнем углу, которые для целей этой статьи являются просто заполнителями, которые я сохранил для полного макета.
Окно выглядит следующим образом: Главное представление. Проблема возникает, когда я пытаюсь изменить его размер. Я хочу, чтобы его по-прежнему можно было свернуть следующим образом: Свернутое представление, но когда я его растягиваю, между labelFrame и addressFrame создается много пустого пространства, чего я не хочу: Максимизированное представление
Я хочу, чтобы labelFrame сокращался вместе с addressFrame, когда я сворачиваю окно, но при расширении я хочу, чтобы его размер изменялся только до определенной ширины (длина самой длинной метки + несколько пикселей), в то время как addressFrame (в основном просто адрес файла в записи) продолжает расширяться. Кажется, у меня может быть только одно или другое: либо ширина labelFrame полностью фиксирована и не сворачивается до тех пор, пока addressFrame не исчезнет из поля зрения при перемещении мэйнфрейма, либо его растяжение создаст дополнительное пространство.
Пожалуйста, помогите.
Вот код:
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()


Подробнее здесь: https://stackoverflow.com/questions/798 ... aximazed-o
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»