python tkinter обновляет содержимое метки при открытии файла - PullRequest
0 голосов
/ 07 ноября 2018

В настоящее время я программирую графический интерфейс с использованием tkinter и Python 3. Моя проблема заключается в том, что я создал метку, с помощью которой я хочу отобразить путь к файлу, который я открыл с помощью метода askopenfilename(), и этот путь не "генерируется" при запуске программы, очевидно, поэтому метка пуста, что делает смысл, но я не знаю, как это исправить. Я собираюсь поместить необходимый код ниже (я собираюсь вырезать ненужный код для этого вопроса):

import tkinter as tk

class Graphicaluserinterface(tk.Frame):

    def __init__(self,master=None):
        super().__init__(master)
        self.grid()
        self.fileopenname=tk.StringVar()
        self.menubar = tk.Menu(self)
        self.create_widgets()

    def create_widgets(self):
        self.inputpathdisplay = tk.Label(self,textvariable=self.fileopenname,bg="white",width=30)
        self.inputpathdisplay.grid(row=1,column=8,columnspan=3,sticky = "W")
    def fileopening(self):
        from tkinter.filedialog import askopenfilename
        self.fileopenname = askopenfilename(filetypes = [("binary files","*.bin*"),("all files","*.*")])


root = tk.Tk()
app = Graphicaluserinterface(master=root)
root.config(menu=app.menubar)
app.mainloop()

Я читал об использовании update_idletasks(). Если это правильно в моем случае, как бы я реализовал это здесь?

1 Ответ

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

Прямо сейчас вы делаете self.fileopenname = askopenfilename(), и это переопределит self.fileopenname как строку вместо StringVar (). Чтобы исправить это, вам нужно установить значение StringVar с помощью set().

Тем не менее, вы также должны определить все свои операции импорта в верхней части кода, а не в своей функции.

import tkinter as tk
from tkinter.filedialog import askopenfilename


class Graphicaluserinterface(tk.Frame):

    def __init__(self,master=None):
        super().__init__(master)
        self.grid()
        self.fileopenname=tk.StringVar()
        self.menubar = tk.Menu(self)

        self.inputpathdisplay = tk.Label(self, textvariable=self.fileopenname, bg="white")
        self.inputpathdisplay.grid(row=1,column=8,columnspan=3,sticky = "W")
        self.fileopening()

    def fileopening(self):
        self.fileopenname.set(askopenfilename(filetypes = [("binary files","*.bin*"),("all files","*.*")]))


root = tk.Tk()
app = Graphicaluserinterface(master=root)
root.config(menu=app.menubar)
app.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...