Я очень новичок в написании кода и изо всех сил пытаюсь связать код для метки в графическом интерфейсе и код для API - PullRequest
0 голосов
/ 02 мая 2018

Я кодировал и GUI, и API по отдельности, я попробовал несколько разных способов связать их. но мысль о том, что просто опубликовать структуру «голой кости» будет проще, так что нужно будет обсудить только код, связывающий их. Код для GUI следующий:

from tkinter import *
def weather_search():


    root = Tk()

    root.title("Weather")
    root.geometry("800x600")

    app = Frame(root)
    app.grid() #This puts the frame into the grid
    label = Label(app, text = "Weather")
    label.grid()

    location_label = Label(root,text = "Enter a Location")
    location_entry = Entry(root)

    location_label.grid(row=1, column = 1) 
    location_entry.grid(row=1, column = 2) 

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

    user_location = location_entry.get()
    print(user_location)

Я пытался использовать это, но я уверен, что нужно сделать больше.

    root.mainloop()

weather_search()

#the code for the API is what follows

import requests

city = input("Enter: ")

url = 'http://api.openweathermap.org/data/2.5/weather?q={}&appid=46346a863b94cd3b89bad166fed78b7d&units=metric'.format(city)

res = requests.get(url)
data = res.json()

print(res)
print(data)

Я не уверен, что мне понадобится функция поиска после ввода местоположения.

1 Ответ

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

Насколько я понимаю, вы хотите получить местоположение из записи.

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

Простой способ узнать, когда читать запись, - это когда пользователь нажимает клавишу RETURN, поэтому я привяжу ее к записи. Затем функция обратного вызова читает запись и устанавливает переменную city.

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

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

from tkinter import *

root = Tk()
root.title("Weather")
root.geometry("800x600")

app = Frame(root)
app.grid() #This puts the frame into the grid
label = Label(app, text = "Weather")
label.grid()

def read_entry(event):  # Entry ENTER key callback function
    global city
    city = location.get()
    print(city)

location_label = Label(root,text = "Enter a Location")
location_label.grid(row=1, column = 1)

location = StringVar()  # Create a StringVar
location_entry = Entry(root, textvariable=location) # Assign textvariable
location_entry.grid(row=1, column = 2)
location_entry.bind('<Return>', read_entry) # Bind ENTER key to function
                                            # that reads entry
location_entry.focus_set()  # Sets keyboard focus to entry

root.mainloop()

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

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