【问题标题】:Problem when defining a function in python with tkinter使用 tkinter 在 python 中定义函数时出现问题
【发布时间】:2020-01-31 04:42:38
【问题描述】:

我正在制作一个在网站上搜索特定单词的程序。 示例:单词:fifa.com 网站上的足球。 我在一个非常容易的终端中做到了。现在我想使用 tkinter 制作一个程序,但它不会工作。 我遇到的问题是当我运行我的程序时它说

文件“c:/Users/Censored/Desktop/PythonFolder/Program.py”,第 22 行,在 temp = Button(root, text='GO', command=searchgo) NameError: name 'searchgo' 未定义

这是我的代码:

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()

谢谢你帮助我!

【问题讨论】:

  • 为什么解决了?

标签: python tkinter python-requests


【解决方案1】:

您的代码有几个错误,

  1. 在将回调分配给按钮之前定义函数searchgo
  2. 在此代码中,最好使用grid 放置按钮而不是place,否则会出现以下错误

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

这个错误的原因是,你不能在同一个主窗口中使用包和网格几何管理器(这个程序的根)。由于大多数小部件都使用了grid,因此也使用grid 来放置按钮。

另外,如果您不知道,在grid 几何管理器rowcolumn 中,位置值从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()

我尝试用一​​些理论来解释我所做的改变。希望你能理解!

【讨论】:

  • 谢谢你让它工作并理解我做了什么。
【解决方案2】:

是否应该在将其分配为 Button 属性之前定义该功能? 这将引发相同的异常:

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)

【讨论】:

    猜你喜欢
    • 2021-08-19
    • 2021-09-20
    • 2020-11-28
    • 1970-01-01
    • 2017-07-09
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    相关资源
    最近更新 更多