Отправить URL для функции - PullRequest
       5

Отправить URL для функции

0 голосов
/ 18 октября 2018

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

import requests
from bs4 import BeautifulSoup
import tkinter
from tkinter import *

def kb():
    page = requests.get(url)
    soup = BeautifulSoup(page.content, 'html.parser')
    seven_day = soup.find(class_="today_nowcard-container")
    forecast_items = seven_day.find_all(class_="today_nowcard-main")
    details_items = seven_day.find(class_="today_nowcard-section")
    place = seven_day.find(class_="today_nowcard-location").get_text()
    daily_temp = seven_day.find(class_="today_nowcard-temp").get_text()
    cloud = seven_day.find(class_="today_nowcard-phrase").get_text()
    print(place)
    print(daily_temp)
    print(cloud)
    data = ("place" + "cloud")
    return place, cloud, daily_temp

var2 = kb()
top = tkinter.Tk()
placevar1 = StringVar()
placevar1.set(var2)
label = Label(top, textvariable=placevar1 )
B = tkinter.Button(top, text ="Copenhagen", command = kb)
B2 = tkinter.Button(top, text ="Skanderborg", command=lambda: kb(url ="https://weather.com/weather/today/l/ad60b9f8e5bf7d9baa35aefb5e724782692ad6b7a35f43ee43caa4182838eef7"))
label.pack()
B.pack()
B2.pack()
top.mainloop()

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Две или три вещи были отключены.

Не забудьте аргументы в ваших функциях, как указывал @ tomh1012.И если вы хотите обновить свой текст, тогда kb должен принимать два аргумента.
Становится:

def kb(url, text_widget):

Будьте осторожны с отступами, они пропустили один или два (я не знаю, если это такплохая копия / вставка)

Не забудьте ключевое слово lambda:, если хотите использовать свою команду в качестве лямбда-выражения.(вы забыли это в первой кнопке B)

Также совет, не стесняйтесь использовать Python IDE, это упрощает многие проблемы с отладкой и синтаксисом (например: https://www.jetbrains.com/pycharm/)

Полный рабочий пример

import requests
from bs4 import BeautifulSoup
import tkinter
from tkinter import *

def kb(url, text_widget):
    page = requests.get(url)
    soup = BeautifulSoup(page.content, 'html.parser')
    seven_day = soup.find(class_="today_nowcard-container")
    forecast_items = seven_day.find_all(class_="today_nowcard-main")
    details_items = seven_day.find(class_="today_nowcard-section")
    place = seven_day.find(class_="today_nowcard-location").get_text()
    daily_temp = seven_day.find(class_="today_nowcard-temp").get_text()
    cloud = seven_day.find(class_="today_nowcard-phrase").get_text()
    print(place)
    print(daily_temp)
    print(cloud)
    data = ("place" + "cloud")
    text_widget.set((place, cloud, daily_temp))
    return place, cloud, daily_temp


top = tkinter.Tk()
placevar1 = StringVar()
var2 = kb(url =
"https://weather.com/weather/today/l/ad60b9f8e5bf7d9baa35aefb5e724782692ad6b7a35f43ee43caa4182838eef7", text_widget=placevar1)
label = Label(top, textvariable=placevar1 )
B = tkinter.Button(top, text ="Copenhagen", command = lambda: kb(url="https://weather.com/weather/today/l/DAXX0009:1:DA", text_widget=placevar1))
B2 = tkinter.Button(top, text ="Skanderborg", command= lambda: kb(url =
"https://weather.com/weather/today/l/ad60b9f8e5bf7d9baa35aefb5e724782692ad6b7a35f43ee43caa4182838eef7", text_widget=placevar1))

label.pack()
B.pack()
B2.pack()
top.mainloop()
0 голосов
/ 18 октября 2018

Мне кажется, что ваша функция kb не ожидает каких-либо параметров.

Где у вас есть

def kb():

Возможно, вам придется вместо этого поставить

def kb(url) :

,Это заставит вашу функцию kb взять URL, с которым вы ее вызываете, и использовать его во всей функции в качестве URL-адреса имени переменной.

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