Получение пути к файлу и его отображение при входе в виджет верхнего уровня не работает - PullRequest
0 голосов
/ 18 февраля 2020

Функция верхнего уровня - получить информацию о конфигурации моей программы. На верхнем уровне есть кнопка для получения пути к файлу и запись для отображения пути к файлу. Но путь к файлу не отображается в записи. И есть кнопка настройки, если я нажимаю на нее, а затем заполненная информация вводится правильно, то Toplevel должен быть уничтожен, но он не работает должным образом.

global MDR_DIR

def configureBtn(initWin):
    EMAIL_REGEX = re.compile(r"^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$")
    USERNAME = username.get()
    USERCODE = usercode.get()
    USERMAIL = useremail.get()
    UF_PATH = MDR_DIR.get()
    if not USERNAME:
        messagebox.showwarning("Warning", "Username should not be empty")
    elif not USERNAME:
        messagebox.showwarning("Warning", "Usercode should not be empty")
    elif not USERMAIL:
        messagebox.showwarning("Warning", "User email should not be empty")
    elif not EMAIL_REGEX.match(USERMAIL):
        messagebox.showwarning("Warning", "User email address is not valid")
    elif not validate_email(USERMAIL):
        messagebox.showwarning("Warning", "User email address does not exist")
    elif not UF_PATH:
        messagebox.showwarning("Warning", "User directory should not be empty")
    else :
        makeCfgFile(USERNAME, USERCODE, USERMAIL, UF_PATH)
        initWin.destroy()
def browseButton():
    filename = filedialog.askdirectory(
    title="Select working directory")
    MDR_DIR.set(filename)
    print(filename)

def configMain():
    if not os.path.exists('./lpConverter'):
        os.mkdir('./lpConverter')
    initWin = tkinter.Toplevel()
    initWin.title('LPCoverter_v.1.0.0 Configuration')
    lb_Username = tkinter.Label(initWin, text = "Username")
    username = tkinter.StringVar()
    lb_Usercode = tkinter.Label(initWin, text = "Usercode")
    usercode = tkinter.StringVar()

    lb_UserEmail = tkinter.Label(initWin, text = "Email")
    useremail = tkinter.StringVar()

    lb_UserDir = tkinter.Label(initWin, text= "MedDRA_DIR")
    MDR_DIR = tkinter.StringVar()
    lb_UserDirShow = tkinter.Entry(initWin, text="./", textvariable=MDR_DIR)
    lb_UserDirShow.insert(0, './')

    entry_Username = tkinter.Entry(initWin, textvariable=username)
    entry_Username.insert(0, 'Username')
    entry_Usercode = tkinter.Entry(initWin, textvariable=usercode)
    entry_Usercode.insert(0, 'Usercode')
    entry_UserEmail = tkinter.Entry(initWin, textvariable=useremail)
    btn_UserMDir = tkinter.Button(initWin, text="..." , command=browseButton)
    lb_Username.grid(row=0, sticky='E')
    lb_Usercode.grid(row=1, sticky='E')
    lb_UserEmail.grid(row=2, sticky='E')
    lb_UserDir.grid(row=3, sticky='E')
    lb_UserDirShow.grid(row=3, column=1)

    entry_Username.grid(row=0, column=1)
    entry_Usercode.grid(row=1, column=1)
    entry_UserEmail.grid(row=2, column=1)
    btn_UserMDir.grid(row=3, column=2)
    cfgButton = tkinter.Button(initWin, text="Configure", command=configureBtn)
    cfgButton.grid(row=5, column=1)


def lltptMain():
    print("Enter")
    if os.path.isfile(FNAME):
        line3 = readCfgFile()
    if lines is not None :
        mdrFilepath = lines[3]
        today = date.today()
        if line3 is not None:
            root.filename = filedialog.askopenfilename(initialdir=mdrFilepath, title="Select MDR Code", filetypes=(("EXCEL files", "*.xlsx"), ("CSV files", "*.csv"), ("ASCII files", "*.asc")))
        mdrFileLoc = root.filename
        if root.filename is not None:
            lltptConverter()

root = tkinter.Tk()
root.title('LPCoverter_v.1.0.0')
setCfgBtn = tkinter.Button(root, text="Select Configure", command=configMain)
doConvBtn = tkinter.Button(root, text="Converter", command=lltptMain)
setCfgBtn.pack()
doConvBtn.pack()
root.mainloop()

1 Ответ

0 голосов
/ 18 февраля 2020

Используйте следующий код для создания кнопки конфигурации, чтобы удалить созданное окно

cfgButton = tkinter.Button(initWin, text="Configure", command=lambda: configureBtn(initWin))
cfgButton.grid(row=5, column=1)

Использование здесь lambda позволяет функции получить parameter главного окна.

...