Извлечение данных из окна tkinter. Получение функции, аналогичной Matlab's inputdlg - PullRequest
0 голосов
/ 09 мая 2018

Привет сообществу,

Некоторое время назад я изучил некоторые навыки программирования на MATLAB, и теперь я использую Python вместо него. Я хотел бы создать функцию, аналогичную inputdlg из MATLAB. Я немного программировал на python, чтобы создать функцию для импорта данных из окна tkinter, например, пользователь дает два ввода (температура 1 и 2), и данные сохраняются в переменной. Однако у меня возникают проблемы при вызове функции в другом скрипте или при вставке кода функции в другой скрипт. Появится окно, но оно не закроется и питон не вернется с работы. Я предполагаю, что по ошибке я сделал бесконечный цикл, который не решается. Кто-нибудь может помочь?

С наилучшими пожеланиями!

def input_dlg():

import tkinter as tk
from tkinter import ttk


class GetEntry():

    def __init__(self, master):


        self.master=master
        self.master.title('Input Dialog Box')
        self.entry_contents=None

        ## Set point entries

        # First point
        self.point1 = ttk.Entry(master)
        self.point1.grid(row=0, column=1)
        self.point1.focus_set()

        # Second point
        self.point2 = ttk.Entry(master)
        self.point2.grid(row=1, column=1)
        self.point2.focus_set()


        # labels
        ttk.Label(text='First Point').grid(row=0, column=0)
        ttk.Label(text='Second Point').grid(row=1, column=0)
        ttk.Button(master, text="Done", width=10,command=self.callback).grid(row=5, column=2)



    def callback(self):
        """ get the contents of the Entries and exit the prompt"""
        self.entry_contents=[self.point1.get(),self.point2.get()]
        self.master.quit()

master = tk.Tk()
GetPoints=GetEntry(master)
master.mainloop()

Points=GetPoints.entry_contents

return list(Points)

1 Ответ

0 голосов
/ 09 мая 2018

Tkinter имеет поддержку пользовательских диалогов в модуле simpledialog, если вы хотите сделать свою жизнь проще.

simpledialog содержит класс Dialog, который специально создан для того, чтобы вы могли наследовать в своем пользовательском диалоге. Проверьте код в simpledialog.py в каталоге Python / Lib / tkinter

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

from tkinter import *
from tkinter import simpledialog

root = Tk()     # There must be a root
root.withdraw() # but don't show it

text = simpledialog.askstring('Dialog', 'What?') # Python waits here ... 
print(text)

Корневое окно не должно отображаться, только диалог. Когда появится диалоговое окно, Python будет ждать, пока вы не закроете его, а затем возобновите выполнение остальной части кода.

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