Переменные виджета сцепления - входные данные -> feed webscraper - PullRequest
0 голосов
/ 12 апреля 2020

Я сталкиваюсь с ошибкой для "TypeError: должен быть str, а не Entry" с моей программой. Сначала я попробовал кастовать с помощью Str (). Я попытался использовать StringVar.

Я прочитал некоторые посты здесь и в документации Python о связывании переменных виджета, и потому что я в Tkinter -> мне нужно использовать переменная переменной. После подписки документации Python я представил переменную содержимого в виде StringVar.

Я хочу взять введенную пользователем строку и добавить ее к другой строке внутри другой переменной. Затем я хочу использовать его в качестве URL-адреса для сканирования моего веб-мастера.

NB. Код веб-браузера работает хорошо. gui (хотя и не очень) также выполняет функции.

Проблема, похоже, заключается в передаче пользовательского ввода в виде строки. У кого-нибудь есть идеи?

    import requests
import bs4
from bs4 import BeautifulSoup as soup
import urllib.request 

import tkinter as tk
import os


#here is the application variable
contents = StringVar()
        # set it to some value
contents.set("this is a variable")
        # tell the entry widget to watch this variable
user_entry["textvariable"] = contents


#search and button functions
def myclick():
    label = tk.Label(lower_frame, text='Searching...')
    label.place(relheight = 0.1, relwidth = 1)

def search_items(product):
    scrape_URL = ('https://www.wickes.co.uk/search?text='+ contents.get())
    page_html = requests.get(scrape_URL)
    page_soup = soup(page_html, "html.parser")

    names = [x.text.strip() for x in page_soup.find_all('a', {'class': 'product-card__title     product-card__title-v2'})]
    prices = [x.text.strip() for x in page_soup.find_all('div', {'class': 'product-card__price-value'})]

    wickes_product_dict = dict(zip(names, prices))

    print(("\n".join("{}\t{}".format(k, v) for k, v in wickes_product_dict.items())).json())

    #label for the output  on the GUI
    #label_products = tk.Label(lower_frame, textvariable= names)
    #label_products.place(relheight = 0.9, relwidth = 1)

#======== GUI ======= #

HEIGHT = 700
WIDTH = 800

root = tk.Tk()

canvas = tk.Canvas(root, height=HEIGHT, width=WIDTH, bg="blue")
canvas.pack()

#use to organise the widgets 
frame = tk.Frame(root, bg="#80c1ff")
frame.place(relx=0.5, rely=0.1, relwidth=0.8, relheight=0.1, anchor = 'n'  )

# This is entry widget
user_entry = tk.Entry(frame, bg='#39BDFB', textvariable=contents)
user_entry.place(relwidth = 0.65, relheight = 1)
user_entry.insert(0, "Enter Product: ")


search_button = tk.Button(frame, text="Search Items", font="Arial 10")
search_button.place(relx = 0.7, rely = 0, relheight = 1, relwidth=0.3)
search_button["command"] = lambda: search_items(contents)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...