Кнопка Tkinter - Как получить значения и отобразить их, используя один модуль для разных кнопок - PullRequest
0 голосов
/ 30 апреля 2018

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

Заранее спасибо.

Вот мой код:

Browse_Files.py

from tkinter import filedialog
def Browse_File():
     global Bfilepath
     Bfilepath = filedialog.askopenfilename(filetypes = (("Please select the required file", "*"), ("All files", "*")))

return Bfilepath

Main.py

from tkinter import *
import sys
import fileinput
import Browse_Files
root = Tk()
root.geometry('1400x800')
root.title('Dr Configuration')

Heading = Label(root, font=('Times New Roman',50,'bold'),text = "Arxml 
Configuration Tool").place(x=300,y=25)
BasepathLabel = Label(root,font=('Times New Roman',20,'bold'),text = " Base 
arxml").place(x=200,y=150)
NewpathLabel= Label(root,font=('Times New Roman',20,'bold'),text = " 
New/Unedited arxml").place(x=200,y=250)
InterfaceLabel = Label(root,font=('Times New Roman',20,'bold'),text = " 
Interface_File").place(x=200,y=350)


BpathtoDisp = StringVar(None)
BpathEntry = Entry(root,font=('Times New Roman',18),textvariable= 
BpathtoDisp,justify='left',width=48).place(x=500,y=150)

NpathtoDisp = StringVar(None)
NpathEntry = Entry(root,font=('Times New Roman',18),textvariable= 
NpathtoDisp,justify='left',width=48).place(x=500,y=250)

InterPathtoDisp = StringVar(None)
InterPathEntry = Entry(root,font=('Times New Roman',18),textvariable= 
NpathtoDisp,justify='left',width=48).place(x=500,y=350)


button1 = Button(root,text="...",height=1,width=3,command=lambda:Browse_Files.Browse_File()).place(x=1100,y=150)
button2 = Button(root,text="...",height=1,width=3,command=lambda:Browse_Files.Browse_File()).place(x=1100,y=250)
button3 = Button(root,text="...",height=1,width=3,command=lambda:Browse_Files.Browse_File()).place(x=1100,y=350)


root.mainloop()

1 Ответ

0 голосов
/ 30 апреля 2018

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

У меня есть похожий виджет, который я использую во многих различных программах

from tkinter import *
from tkinter import filedialog

class FileSelect(Frame):
    def __init__(self,master,label="",**kw):
        Frame.__init__(self,master)
        self.configure(**kw)
        self.file = StringVar()

        self.Label = Label(self, text=label)
        self.Label.config(width=10,anchor=E)
        self.filenamebox = Entry(self,text=self.file)
        self.filenamebox.config(width=50)
        self.btnBrowse = Button(self,text='Browse',command=self.browse_file)
        self.btnBrowse.config(width=10)
        self.Label.grid(row=0,column=0,pady=5,sticky=E)
        self.filenamebox.grid(row=0,column=1,pady=5)
        self.btnBrowse.grid(row=0,column=2,pady=5,padx=5)

    def browse_file(self):
        filename = filedialog.askopenfilename(filetypes=[('All File','*.*')])
        self.file.set(filename)

    def get_filename(self):
        return self.file.get()


def main():
    root = Tk()
    root.title("Example Widget")

    fileSelect1 = FileSelect(root,label="My File 1")
    fileSelect1.grid()
    fileSelect2 = FileSelect(root,label="My File 2")
    fileSelect2.grid()
    root.mainloop()


if __name__ == '__main__':
    main()

В вашем коде, если вы хотите значение выбранного файла, используйте

fileSelect1.get_filename()

РЕДАКТИРОВАТЬ: я создал новую версию, которая является только кнопкой «с памятью», чтобы запомнить, какой элемент был выбран в диалоговом окне файла. Это позволит вам использовать менеджер геометрии place (который я не рекомендую). Это не завершено, но вы должны понять.

from tkinter import *
from tkinter import filedialog

class FileSelectButton(Button):
    def __init__(self,master,**kw):
        Button.__init__(self,master,text='Browse',command=self.browse_file,width=10,**kw)
        self.file = StringVar()

    def browse_file(self):
        filename = filedialog.askopenfilename(filetypes=[('All File','*.*')])
        self.file.set(filename)

    def get_filename(self):
        return self.file.get()


def main():
    root = Tk()
    root.geometry('1400x800')
    root.title("Example Widget")

    Label(root, font=('Times New Roman',50,'bold'),text = "Label1").place(x=200,y=150)
    fileSelect1 = FileSelectButton(root)
    fileSelect1.place(x=500,y=150)

    Label(root, font=('Times New Roman',50,'bold'),text = "Label2").place(x=200,y=250)
    fileSelect2 = FileSelectButton(root)
    fileSelect2.place(x=500,y=250)
    root.mainloop()


if __name__ == '__main__':
    main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...