Определение функции или класса для просмотра и составления списка нескольких каталогов с помощью tkinter - PullRequest
0 голосов
/ 21 ноября 2018

Я хотел бы создать функцию или класс с соответствующим форматированием для создания текстовой метки, поля ввода и кнопки.Кнопка позволит мне просмотреть мой каталог и заполнить поле ввода выбранным каталогом.Код, который у меня есть, позволяет мне делать большую часть этого, однако каталог всегда заполняется в последнем поле ввода, а не в том, к которому относится кнопка.

Я новичок в tkinter и графических интерфейсах, поэтому извиняюсь, если это простое решение, я предполагаю, что проблема связана с root.name.set ссылкой на функцию, которая была вызвана последней.

from tkinter import *
from tkinter import filedialog

def askdirectory():
  dirname = filedialog.askdirectory()
  root.name.set(dirname)


def dirField(root, label, rowNum):
    text = StringVar()
    text.set(label)
    dirText = Label(root, textvariable = text, height =4)
    dirText.grid(row = rowNum, column = 1)

    dirBut = Button(root, text = 'Browse', command = askdirectory)
    dirBut.grid(row = rowNum, column = 3)

    root.name = StringVar()
    adDir = Entry(root,textvariable = root.name, width = 100)
    adDir.grid(row = rowNum, column = 2)


if __name__ == '__main__':
    root = Tk()
    root.geometry('1000x750')

    adText = "Select directory of Ads"
    userText = "Select directory of User credentials"

    adField = dirField(root, adText, 1)
    userField = dirField(root, userText, 2)

    root.mainloop()

1 Ответ

0 голосов
/ 21 ноября 2018

Вы должны понимать, что вам нужно, чтобы у каждого Entry был свой textvariable.В противном случае они будут перекрываться.Посмотрите на мой код, который должен помочь вам.

from tkinter import *
from tkinter import filedialog

path = [None, None] # Fill it with the required number of filedialogs

def askdirectory(i):
    dirname = filedialog.askdirectory()
    path[i].set(dirname)


def dirField(root, label, rowNum, i):
    dirText = Label(root, text=label)
    dirText.grid(row=rowNum, column=0)

    dirBut = Button(root, text='Browse', command=lambda: askdirectory(i))
    dirBut.grid(row=rowNum, column=2)

    path[i] = StringVar()
    adDir = Entry(root, textvariable=path[i], width=50)
    adDir.grid(row=rowNum, column=1)


if __name__ == '__main__':
    root = Tk()

    adText = "Select directory of Ads"
    userText = "Select directory of User credentials"

    adField = dirField(root, adText, 0, 0)
    userField = dirField(root, userText, 1, 1)

    root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...