Как получить несколько текстовых записей из GUI и использовать их в основном скрипте Python? - PullRequest
0 голосов
/ 30 апреля 2018

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

Для его работы необходимы следующие входные данные (текстовые записи): Пример пользовательского ввода также отображается рядом с каждой подсказкой ввода:

 Enter the maximum number of tweets: *100*

 Do you want to search by topic? type: y or n: *y*

 Enter topic: *MoSalah*

 Enter visulaization/projection type:  
 1. Mercator 
 2. orthographic 
 3. melloweide 
 >>  *Mercator* 

 Zoom in to a conteninent of choice:  
 1. world 
 2. africa 
 3. asia 
 4. north america 
 5. south america 
 6. europe 
 7. usa 
 >>  *world*

 Enter symbol shape: 
 1. square 
 2. circle 
 >> *circle*

Теперь, чтобы сделать пользовательский опыт более захватывающим, я хочу создать простой графический интерфейс, который запрашивает у пользователя все эти входные данные и сохраняет их в соответствующих переменных, но я не знаю, как создать один и, что более важно, связать GUI с кодом Python, работающим за ним.

Нужно ли иметь отдельную функцию поиска для каждого из обязательных входов, показанных выше? Например, это как функция поиска для макс. твитов должен выглядеть как с помощью графического интерфейса tkinter:

from tkinter import * 
root = Tk()

root.geometry('200x100')

# Retrieve to get input form user and store it in a variable

# Retrieve maximum number of tweets

def retrieveMaxTweets():
    maxTweets = textBox.get()

    return maxTweets 

textBox = Text(root, height = 2, width = 10)
textBox.pack()

buttonComment = Button(root, height=1, width=10, text='Enter max no. of tweets', command = lambda: retrieveMaxTweets())

buttonComment.pack()

mainloop()

А затем в той части кода, где я изначально запрашивал ограничение, я делаю это:

limit = retrieveMaxTweets()

вместо этого:

limit = int(input(" Enter the maximum number of tweets: "))

1 Ответ

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

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

Например

import tkinter as tk

class App(tk.Frame):
    def __init__(self,master=None,**kw):
        #Create a blank dictionary
        self.answers = {}
        tk.Frame.__init__(self,master=master,**kw)

        tk.Label(self,text="Maximum number of Tweets").grid(row=0,column=0)
        self.question1 = tk.Entry(self)
        self.question1.grid(row=0,column=1)

        tk.Label(self,text="Topic").grid(row=1,column=0)
        self.question2 = tk.Entry(self)
        self.question2.grid(row=1,column=1)

        tk.Button(self,text="Go",command = self.collectAnswers).grid(row=2,column=1)


    def collectAnswers(self):
        self.answers['MaxTweets'] = self.question1.get()
        self.answers['Topic'] = self.question2.get()
        functionThatUsesAnswers(self.answers)

def functionThatUsesAnswers(answers):
    print("Maximum Number of Tweets ", answers['MaxTweets'])
    print("Topic ", answers['Topic'])


if __name__ == '__main__':
    root = tk.Tk()
    App(root).grid()
    root.mainloop()

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

...