Я строю приложение Python, используя Tkinter. В этой прокручиваемой раме я добавил несколько виджетов LabelfRame. Каждый LabelfRame содержит кнопку «Select Path», которая должна открыть диалоговое окно выбора папок. LabelfRames < /p>
└ack in -incually с кнопкой «Select Path» < /p>
Каждая кнопка вызывает следующую функцию: < /p>
def select_path(self):
filedialog.askdirectory()
< /code>
Все команды кнопок правильно устанавливаются (используя command = self.select_path, а не self.select_path ()).
Однако каждый раз, когда я нажимаю кнопку, приложение замораживает и показывает «(не отвечаю)» в строке заголовка. Прекрасно. /> gui < /p>
После рекомендации Фураса я уменьшил свой код, чтобы использовать только холст, рамки и кнопки пути, и все работает нормально. Тем не менее, мое основное приложение все еще не работает. < /P>
Это мой уменьшенный код. < /P>
import tkinter
from tkinter import ttk, VERTICAL, ALL
from tkinter import filedialog as fd
class MyApp(tkinter.Tk):
def __init__(self):
super().__init__()
self.path_button = None
self.label_frame_3 = None
self.label_frame_2 = None
self.label_frame_1 = None
self.title('My application')
self.resizable(False, False)
self.geometry('1200x500')
self.current_window = None
self.scrollable_frame = None
self.y_scrollbar = None
self.my_canvas = None
self.create_gui()
def create_gui(self):
# scroll
# create a container frame for scrolling
self.my_canvas = tkinter.Canvas(self)
# add a Scrollbars to Canvas
self.y_scrollbar = ttk.Scrollbar(self.my_canvas, orient=VERTICAL, command=self.my_canvas.yview)
# Configure the canvas
self.my_canvas.configure(yscrollcommand=self.y_scrollbar.set, width=500, height=500)
def on_mousewheel(event):
self.my_canvas.yview_scroll(int(-1*(event.delta/60)), "units")
# create another frame inside my_canvas
self.scrollable_frame = tkinter.Frame(self.my_canvas, bg='white')
self.my_canvas.bind("", lambda e: self.my_canvas.configure(scrollregion=self.my_canvas.bbox(ALL)))
self.my_canvas.bind_all("", on_mousewheel)
self.my_canvas.create_window((0, 0), window=self.scrollable_frame, anchor='nw')
# place scroll and scroll-bar
self.my_canvas.pack(side='left', fill='both', expand=True)
self.y_scrollbar.pack(side='right', fill='y')
# end scroll
self.create_all_labels(200, 200)
def create_all_labels(self, width, height):
# create and place frame 1
self.label_frame_1 = tkinter.LabelFrame(self.scrollable_frame, text=" LabelFrame 1 ", labelanchor='nw', width=width,
height=height)
self.label_frame_1.grid(column=0, row=1, padx=5, pady=5)
self.create_frame(self.label_frame_1, "label_frame_1")
# create and place frame 2
self.label_frame_2 = tkinter.LabelFrame(self.scrollable_frame, text=" LabelFrame 2 ", labelanchor='nw', width=width,
height=height)
self.label_frame_2.grid(column=1, row=1, padx=5, pady=5)
self.create_frame(self.label_frame_2, "label_frame_2")
# create and place frame 3
self.label_frame_3 = tkinter.LabelFrame(self.scrollable_frame, text=" LabelFrame 3 ", labelanchor='nw', width=width,
height=height)
self.label_frame_3.grid(column=2, row=1, padx=5, pady=5)
self.create_frame(self.label_frame_3, "label_frame_3")
# create and place frame 4
self.label_frame_4 = tkinter.LabelFrame(self.scrollable_frame, text=" LabelFrame 4 ", labelanchor='nw', width=width,
height=height)
self.label_frame_4.grid(column=0, row=2, padx=5, pady=5)
self.create_frame(self.label_frame_4, "label_frame_4")
# create and place frame 5
self.label_frame_5 = tkinter.LabelFrame(self.scrollable_frame, text=" LabelFrame 5 ", labelanchor='nw', width=width,
height=height)
self.label_frame_5.grid(column=1, row=2, padx=5, pady=5)
self.create_frame(self.label_frame_5, "label_frame_5")
# create and place frame 6
self.label_frame_6 = tkinter.LabelFrame(self.scrollable_frame, text=" LabelFrame 6 ", labelanchor='nw', width=width,
height=height)
self.label_frame_6.grid(column=2, row=2, padx=5, pady=5)
self.create_frame(self.label_frame_6, "label_frame_6")
# create and place frame 7
self.label_frame_7 = tkinter.LabelFrame(self.scrollable_frame, text=" LabelFrame 7 ", labelanchor='nw', width=width,
height=height)
self.label_frame_7.grid(column=0, row=3, padx=5, pady=5)
self.create_frame(self.label_frame_7, "label_frame_7")
# create and place frame 8
self.label_frame_8 = tkinter.LabelFrame(self.scrollable_frame, text=" LabelFrame 8 ", labelanchor='nw', width=width,
height=height)
self.label_frame_8.grid(column=1, row=3, padx=5, pady=5)
self.create_frame(self.label_frame_8, "label_frame_8")
# create and place frame 9
self.label_frame_9 = tkinter.LabelFrame(self.scrollable_frame, text=" LabelFrame 9 ", labelanchor='nw', width=width,
height=height)
self.label_frame_9.grid(column=2, row=3, padx=5, pady=5)
self.create_frame(self.label_frame_9, "label_frame_9")
# create and place frame 10
self.label_frame_10 = tkinter.LabelFrame(self.scrollable_frame, text=" LabelFrame 10 ", labelanchor='nw', width=width,
height=height)
self.label_frame_10.grid(column=0, row=4, padx=5, pady=5)
self.create_frame(self.label_frame_10, "label_frame_10")
# create and place frame 11
self.label_frame_11 = tkinter.LabelFrame(self.scrollable_frame, text=" LabelFrame 11 ", labelanchor='nw', width=width,
height=height)
self.label_frame_11.grid(column=1, row=4, padx=5, pady=5)
self.create_frame(self.label_frame_11, "label_frame_11")
# create and place frame 12
self.label_frame_12 = tkinter.LabelFrame(self.scrollable_frame, text=" LabelFrame 12 ", labelanchor='nw', width=width,
height=height)
self.label_frame_12.grid(column=2, row=4, padx=5, pady=5)
self.create_frame(self.label_frame_12, "label_frame_12")
def create_frame(self, frame: tkinter.LabelFrame, name: str):
# create and place Select Path button
self.path_button = tkinter.Button(frame, text=" Select Path ", command=self.select_path)
self.path_button.place(x=20, y=20)
def select_path(self):
print("before")
destination = fd.askdirectory(initialdir="C:", title="Select")
print("after")
def main_loop(self):
self.mainloop()
myapp = MyApp()
myapp.mainloop()
Подробнее здесь: https://stackoverflow.com/questions/796 ... -canvas-la
Приложение Tkinter замерзает при использовании filedialog.askdirectory () в прокручиваемом макете холста ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как получить надлежащий путь к корпусу от tkkinters filedialog.askdirectory
Anonymous » » в форуме Python - 0 Ответы
- 4 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Отозванное окно не появляется снова с deiconify после filedialog в Tkinter на MacOS
Anonymous » » в форуме Python - 0 Ответы
- 17 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Задержка для отображения пути в поле въезда после использования FileDialog из Tkinter
Anonymous » » в форуме Python - 0 Ответы
- 9 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Задержка для отображения пути в поле въезда после использования FileDialog из Tkinter
Anonymous » » в форуме Python - 0 Ответы
- 15 Просмотры
-
Последнее сообщение Anonymous
-