【问题标题】:Send url to function发送 url 到函数
【发布时间】:2018-10-18 18:15:46
【问题描述】:

我对 python 很陌生,但喜欢它。
我有问题。
我希望从 tkinter 中的按钮解析我的函数 KB 的 url,所以当用户单击 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()

【问题讨论】:

  • 您的代码格式不正确:您的返回在函数之外;您在函数内部有未定义的变量 url — Python 无法猜测您要传递 url,因此您需要将函数的定义更改为 def kb(url):。

标签: python python-3.x tkinter


【解决方案1】:

在我看来,您的 kb 函数不需要任何参数。

你在哪里

def kb():

你可能需要放

def kb(url) :

相反。这将使您的 kb 函数获取您调用它的 URL,并在整个函数中使用它作为变量名 url。

【讨论】:

    【解决方案2】:

    有两三件事情发生了。

    不要忘记@tomh1012 指出的函数中的参数。 如果你想更新你的文本,那么kb 必须接受两个参数。
    变成:

    def kb(url, text_widget):
    

    小心缩进,他们缺少一两个(我不知道它是否是错误的复制/粘贴)

    如果您想将命令用作 lambda 表达式,请不要忘记关键字 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()
    

    【讨论】:

      猜你喜欢
      • 2020-10-19
      • 1970-01-01
      • 1970-01-01
      • 2020-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多