Проблема в том, что когда вы выбираете папку и обновляете self.label_directory
Строкой пути к выбранной папке, она манипулирует сеткой и расширяет ваш Click Here Button
.
Чтобы решить эту проблему, сначала button_1
должен иметь опцию sticky
, установленную на W, чтобы он не перемещался справа от своей ячейки сетки, когда манипулируют шириной его ячеек сетки.
Другая проблема, с которой вы столкнулись, заключается в том, что вы слишком сильно увеличиваете количество строк и столбцов в сетке, вам следует увеличивать только на необходимые пробелы, например, начинать со строки 1, а затем помещать следующую строку во строку 2. это помогает убедиться, что легко понять, где находится каждый элемент.
После всего сказанного я верю, что этот код исправит проблему соответствующим образом:
import tkinter as tk
from tkinter import *
import tkinter.filedialog as fdialog
class karl(Frame):
def __init__(self):
tk.Frame.__init__(self)
self.pack(fill = tk.BOTH)
self.master.title("Image Selector")
self.master.geometry("500x500")
self.master.resizable(0, 0)
self.pack_propagate(0)
self.label_button_1 = Label(self, text="Select directory for picking images")
self.label_button_1.grid(row = 0, column = 0, columnspan = 1, sticky = W)
self.button_1 = tk.Button(self, text="CLICK HERE", width=25, command=self.open_dialog_box_to_select_folder)
self.button_1.grid(row=0, column=1, columnspan=2, sticky=W)
self.label_for_label_directory = Label(self, text="Current chosen directory")
self.label_for_label_directory.grid(row=1, column=0, rowspan=1, columnspan=1, sticky=W)
self.label_directory = Label(self, text="")
self.label_directory.grid(row=1, column=1, rowspan=1, columnspan=2, sticky=W)
self.label_for_entry_for_class_label_values = Label(self, text="Enter (+) seperated class labels\nto be assigned to the images")
self.label_for_entry_for_class_label_values.grid(row = 2, column = 0, rowspan = 1, columnspan = 2, sticky = W)
self.entry_for_class_label_values = Entry(self)
self.entry_for_class_label_values.grid(row = 2, column = 1, rowspan = 1, columnspan = 1, sticky = W)
def open_dialog_box_to_select_folder(self):
self.chosen_directory_name = fdialog.askdirectory()
self.label_directory.config(text = self.chosen_directory_name)
def main():
karl().mainloop()
if __name__ == '__main__':
main()
Я изменил ранее упомянутые элементы для достижения этой цели, если у вас есть какие-либо вопросы о моем решении, не стесняйтесь спрашивать:)
Вот ваша программа tkinter, преобразованная в файл Excel. Чтобы визуализировать, как работает система координатной сетки, светло-синий - то место, куда будет помещена строка вашего пути при выборе папки.
![enter image description here](https://i.stack.imgur.com/q3ncq.png)
Когда вы выбираете длинный путь к файлу, метка path_label расширяется (светло-голубая часть Excel, это будет нажимать кнопку click me вправо. Так далеко вправо, что она будет нажимать кнопку в области просмотра окон вот так.
![enter image description here](https://i.stack.imgur.com/FNN8q.png)