Я сталкиваюсь с ошибкой для "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)