Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Баг в коде

Степан Таратынов Ученик (145), открыт 1 неделю назад
Привет всем. Пишу программу которая открывает страницу на вики. Пользователь вводит в текстовое поле название фигуры, нажимает кнопку и открывается страница в браузере. Проблема в том что после того как я нажимаю кнопку запустить код в вс коде сразу вылазит страничка википедии, а кнопка не функционирует как надо, код прилагаю ниже, помогите исправить!

 from webbrowser import open 
from tkinter import *
from tkinter import ttk


def wikisearch(figurename):

open("https://ru.wikipedia.org/wiki/"+str(figurename))


ws = Tk()
ws.title("GeomSearch")
ws.geometry('500x500')
ws['bg'] = '#f2f2f2'

searchBox = Entry(ws, width=50, justify="center")
searchBox.pack(anchor="center", pady=200)
searchValueGet = searchBox.get()

btn = ttk.Button(text="Поиск", command=wikisearch(searchValueGet))
btn.pack()

ws.mainloop()
2 ответа
Рин Качи Профи (884) 1 неделю назад
Ответ от нейросети прости я сам не шарю но хочу помочь:
Проблема здесь в том, что вы вызываете функцию `wikisearch` в момент создания кнопки, а не при нажатии на нее. Вам нужно передавать ссылку на функцию, а не результат ее выполнения.

Исправленный код:

```python
from webbrowser import open
from tkinter import *
from tkinter import ttk

def wikisearch():
figurename = searchBox.get()
open("https//ru.wikipedia.org/wiki/"+str(figurename))

ws = Tk()
ws.title("GeomSearch")
ws.geometry('500x500')
ws['bg'] = '#f2f2f2'

searchBox = Entry(ws, width=50, justify="center")
searchBox.pack(anchor="center", pady=200)

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

ws.mainloop()
```

Теперь функция `wikisearch` будет вызываться только при нажатии на кнопку "Поиск", и в нее будет передаваться значение из текстового поля.
Рин КачиПрофи (884) 1 неделю назад
только тут в open("https//ru.wikipedia.or/wiki/"+str(figurename)) между https и // поставь :
Рин КачиПрофи (884) 1 неделю назад
а вы изменили там чтото так что еще 1 ответ от нейросети:
Проблема в вашем коде заключается в том, что вы вызываете функцию `wikisearch` сразу при создании кнопки, вместо того чтобы передать ссылку на функцию.

Измените строку:
```
btn = ttk.Button(text="Поиск", command=wikisearch(searchValueGet))
```

На:
```
btn = ttk.Button(text="Поиск", command=lambda: wikisearch(searchBox.get()))
```

Это позволит вызывать функцию `wikisearch` только при нажатии кнопки, после того как пользователь введет значение в поле ввода.
Степан ТаратыновУченик (145) 1 неделю назад
Спасибо! Помогло!
Рин КачиПрофи (884) 1 неделю назад
незачто и если не трудно поставь нравиться на ответ
Рин КачиПрофи (884) 1 неделю назад
а вы и так поставили
\
Рин КачиПрофи (884) 1 неделю назад
спасибо большое
Дмитрий Хатик Профи (825) 1 неделю назад
Ты не сказал кнопке ждать клика вот он и сам живёт
Степан ТаратыновУченик (145) 1 неделю назад
А как это сделать? Понимаю что уже ответили, но спрашиваю чтобы понять до конца
Дмитрий Хатик Профи (825) Степан Таратынов, я не знаю на чем ты пишешь. На нашем людском это "при нажатии на кнопку клавишной (ЛКМ) открыть ссылку один раз "Википедия" после отпуска кнопки (ЛКМ ) перестать выполнять действие"
Похожие вопросы