Проблема при определении функции в python с помощью tkinter - PullRequest
0 голосов
/ 19 января 2020

Я создаю программу, которая ищет на сайте определенное c слово. Пример: Слово: футбол на сайте fifa.com. Я сделал это в терминале, что было очень легко. Теперь я хочу сделать программу, используя tkinter, и она не будет работать. Проблема, с которой я сталкиваюсь, заключается в том, что когда я запускаю свою программу, она говорит

Файл "c: / Users / Censored / Desktop / PythonFolder / Program.py", строка 22, в temp = Button (root, текст = 'GO', команда = поиск go) NameError: имя 'search go' не определено

Это мой код:

import requests
import re
from tkinter import *

root = Tk()
root.title('WordCounter')
root.configure(bg='#2f3136')
root.geometry('700x700')
root.resizable(False, False)

# Buttons
e1 = Entry(root, width='35')
label1 = Label(root, text='Write The Word You Want To Search For', bg='#2f3136', fg='white',)

e2 = Entry(root, width='35')
label2 = Label(root, text='Write the websites URL', bg='#2f3136', fg='white',)

temp = Button(root, text='GO', command=searchgo)
# Buttons on screen
label1.grid(row='1', column='1',padx='10')
e1.grid(row='2', column='1', padx='10')

label2.grid(row='1', column='2', padx='10')
e2.grid(row='2', column='2', padx='10')

temp.pack()

# Define Functions
def searchgo():
    word = e1.get()
    URL = e2.get()
    page = requests.get(URL).text
    print(page.find(word))

root.mainloop()

Спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 19 января 2020

В вашем коде есть пара ошибок,

  1. Определите функцию searchgo, прежде чем назначить обратный вызов для вашей кнопки
  2. . В этом коде лучше использовать grid для размещения Вы нажимаете кнопку вместо place или получаете следующую ошибку

cannot use geometry manager pack inside . (root) which already has slaves managed by grid

Причина этой ошибки в том, что вы не можете использовать менеджеры геометрии пакетов и сетки внутри того же главного окна (root в этой программе). Поскольку вы использовали grid для большинства виджетов, используйте grid для размещения кнопки.

Кроме того, если вы не знаете, в grid Диспетчер геометрии row и column значения позиций начинаются с 0, а не 1

Вот код:

import requests
import re
from tkinter import *

root = Tk()
root.title('WordCounter')
root.configure(bg='#2f3136')
root.geometry('700x700')
root.resizable(False, False)

# Buttons
e1 = Entry(root, width='35')
label1 = Label(root, text='Write The Word You Want To Search For', bg='#2f3136', fg='white',)

e2 = Entry(root, width='35')
label2 = Label(root, text='Write the websites URL', bg='#2f3136', fg='white',)

# Define Functions
def searchgo():
    word = e1.get()
    URL = e2.get()
    page = requests.get(URL).text
    print(page.find(word))

temp = Button(root, text='GO', command=searchgo)

# Buttons on screen
label1.grid(row='0', column='0',padx='10')
e1.grid(row='1', column='0', padx='10')

label2.grid(row='0', column='1', padx='10')
e2.grid(row='1', column='1', padx='10')

# use the grid manager to place your button
temp.grid(row='1', column='2', padx='10')

root.mainloop()

Я попытался объяснить изменения, которые я сделал с некоторой теорией. Я надеюсь, вы понимаете!

0 голосов
/ 19 января 2020

Должна ли функция быть определена до того, как вы назначите ее в качестве атрибута кнопки? Это вызовет то же исключение:

class A:

def __init__(self, something):
    self.something = something

a = A(func)

def func():
    return

Но это работает, как и ожидалось:

def func():
    return


class A:

    def __init__(self, something):
        self.something = something

    a = A(func)
...