【问题标题】:Getting user input in tkinter failing在 tkinter 中获取用户输入失败
【发布时间】:2018-04-29 18:49:11
【问题描述】:

我正在创建一个 GUI 来使用 tkinter 从网站下载文件。 但我遇到了一个意外的错误 代码:

from tkinter import *
from tkinter import ttk
import urllib.request

root = Tk(className='VideoDownloader')
root.geometry("400x200")
root.resizable(width=False, height=False)

Lab = ttk.Label(root, text='Download a file from any site')
Lab.grid(row=0, column=0)


def down():
    u = url.get()
    n = name.get()
    urllib.request.urlretrieve(u, n)

Lab1 = ttk.Label(root, text='Enter file name :')
Lab1.grid(row=1, column=0)

name = ttk.Entry(root,)
name.grid(row=2, column=0)

Lab2 = ttk.Label(root, text='Enter video url :')
Lab2.grid(row=3, column=0)

url = Text(root,)
url.grid(row=4, column=0)

but = ttk.Button(root, text='Download', command=down())
but.grid(row=5, column=0)
root.mainloop()

产生错误:

Traceback (most recent call last):
  File "C:/Users/User/Desktop/test.py", line 30, in <module>
    but = ttk.Button(root, text='Download', command=down())
  File "C:/Users/User/Desktop/test.py", line 14, in down
    u = url.get()
TypeError: get() takes at least 2 positional arguments (1 given)

在我的上一个项目中,我创建了一个 GUI 来比较数字并且 get() 不需要参数

【问题讨论】:

  • url 不是Entry

标签: python tkinter get


【解决方案1】:

UrlText 小部件,而不是 Entry 小部件。如果您只想要一行,请使用Entry 小部件,get() 方法可以正常工作。


对于可以有多行的Text 小部件,请使用以下命令获取所有输入:

url.get("1.0",END)

“1.0”表示输入应该从第一行的第一个字符开始读取。 END 是一个 tkinter 常量,设置为字符串“end”,意思是读取到小部件结束。事实上,这会在输入的末尾添加一个换行符,因此您应该使用自定义字符串:

'end-1c'

表示结尾前一个字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多