Как сделать поисковую строку в python с tkinter?

Столкнулась с проблемой: хочу сделать что-то вроде браузера в питоне с ткинтер, но вместо отдельного окна от ткинтер открывается только строка от пайтон.
По факту работает, но открывается вместо этого окна ткинтер строка питона.

Думаю, что дело в input! Но не знаю, как изменить, помогите.

Код:

import webbrowser
from tkinter import *
from tkinter import ttk


def open_link(url):
    webbrowser.open_new("https://www.youtube.com/")


def open_link2(url):
    webbrowser.open_new("https://mail.google.com/")


def open_link3(url):
    webbrowser.open_new("https://www.google.com/")


def open_link4(url):
    search = input(entry.get())
    webbrowser.open_new(f"https://www.google.com/search?q={search}")


root = Tk()
root.title("Google")
root.geometry("600x300")

lbl1 = Label(text="GOOGLE", font=("Roboto", 15))
lbl1.pack(anchor=N)

entry = ttk.Entry(root)
entry.pack(fill=X)
entry.insert(0, "Введите текст...")

button0 = ttk.Button(text="Поиск", command=open_link4(""))
button0.pack()

button1 = ttk.Button(
    text="Youtube", command=lambda: open_link("https://www.youtube.com/")
)
button1.pack(pady=30)

button2 = ttk.Button(
    text="Gmail", command=lambda: open_link2("https://mail.google.com/")
)
button2.pack()

button3 = ttk.Button(text="Google", command=open_link3("https://www.google.com"))
button3.pack(pady=30)

root.mainloop()

Ответы (1 шт):

Автор решения: Amgarak

input() вам решительно не нужен. Вы же хотите взаимодействовать не с консольным вводом, а работать исключительно через GUI.

def open_link4(url): # -> def open_link4(): 
   search=input(entry.get()) # -> search=entry.get()
   webbrowser.open_new(f'https://www.google.com/search?q={search}')

Убираем input(), что бы программа не ожидала ввода в консоль и не блокировала интерфейс. К тому же entry.get() будет уже достаточно для получения данных из поля.


Обратите ещё внимание на:

button0=ttk.Button(text='Поиск', command=open_link4(''))

В command нужно передавать ссылку на функцию, а не результат её вызова!

button0 = ttk.Button(text="Поиск", command=open_link4)

Но если очень нужно, то используете lambda как в других кнопках.


Вы url зачем вообще передаете, если никак его не используете?

→ Ссылка