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

То, что я пытаюсь достичь, это вставить определенный пользователем фрагмент текста в определенное место в скрипте. Я пробовал текстовый виджет на Tkinter, однако мне удалось открыть только скрипт в приложении, чего я избегаю (в оптимальном случае пользователю приложения даже не нужно видеть исходный код).

Я скорее пытаюсь создать текстовое поле Tkinter, рядом с которым находится кнопка «Выполнить». Таким образом, когда пользователь вводит определенное имя (например, «Law Conference Attendees Jan 2020»), он автоматически помещает этот фрагмент текста здесь df['Data Identifier'] = ''

Мой текущий код Tkinter выглядит так:

    def __init__(self):
        super(Root, self).__init__()
        self.title("Python Tkinter Dialog Widget")
        self.minsize(320, 200)
        self.text_area = Text()
        self.text_area.grid(column = 2, row = 3)
        self.labelFrame = ttk.LabelFrame(self, text = "Open File")
        self.labelFrame.grid(column = 0, row = 1, padx = 20, pady = 20)

        self.button()
        self.button1()
        self.button2()
        self.textbox()
        self.textbox1()
        self.textbox2()


    def button(self):
        self.button = ttk.Button(self.labelFrame, text = "Browse a File",command = self.open_file)
        self.button.grid(column = 1, row = 1)

    def button1(self):
        self.button1 = ttk.Button(self.labelFrame, text = "Cleanse Campaign Codes",command = self.standardize)
        self.button1.grid(column = 1, row = 7)

    def button2(self):
        self.button2 = ttk.Button(self.labelFrame, text = "Cleanse Data",command = self.helloCallBack)
        self.button2.grid(column = 1, row = 8)


    def textbox(self):
        self.textbox = ttk.Entry(self.labelFrame)
        self.textbox.grid(column = 6, row = 1)

    def textbox1(self):
        self.textbox1 = ttk.Entry(self.labelFrame)
        self.textbox1.grid(column = 6, row = 2)

    def textbox2(self):
        self.textbox2 = ttk.Entry(self.labelFrame)
        self.textbox2.grid(column = 6, row = 3)

    def helloCallBack(self):
        os.system('python data_cleansing_final.py')

    def open_file(self):
        open_return = filedialog.askopenfile(initialdir =  "C:/", title="Select file to open", filetypes=(("python files", "*.py"), ("all files", "*.*")))
        for line in open_return:
            self.text_area.insert(END, line)

    def standardize(self):
        open_return = open_return.apply(lambda x: difflib.get_close_matches(x, textbox)[0])

root = Root()
root.mainloop()

Буду очень признателен за любую помощь или совет.

-1
zodimz 22 Ноя 2019 в 18:47

2 ответа

Вы можете сделать запись:

text = Entry(root, width=10) text.grid(column=0, row=0)

С кнопкой рядом с ним:

run = Button(root, text="Run", width=10, command=runClicked) run.grid(column=1, row=0)

И затем метод с именем runClicked над этим:

def runClicked():
   userText = text.get()

И тогда переменная userText будет содержать все, что пользователь вводит, и вы можете использовать его по своему усмотрению.

В целом ваш код будет выглядеть примерно так:

def runClicked():
   userText = text.get()

text = Entry(root, width=10)
text.grid(column=0, row=0)


run = Button(root, text="Run", width=10, command=runClicked)
run.grid(column=1, row=0)

0
jhf2 22 Ноя 2019 в 21:49

Вы можете добавить StringVar в текстовое поле.

self.inputstring = ttk.StringVar(self.lableFrame, value = 'value')
self.textbox2 = ttk.Entry(self.labelFrame, textvariable = self.inputstring)
self.textbox2.grid(column = 6, row = 3)

Чтобы прочитать переменную, вы должны использовать:

self.inputstring.get()
0
Erik 22 Ноя 2019 в 19:16