如何在tkinter中使用文本框并获取值?python 3
如何在tkinter的输入框中创建多行,并利用这些输入来生成一些东西?
比如,我想让一个文本框弹出来,问用户:
How many squares do you want? (ex: 4x4, 5x5)
What color do you want them?
然后根据用户的输入,我想创建那么多个特定高度和宽度的方块,并指定颜色等等。
我对tkinter完全是新手,不太确定该如何着手。
我试过这样做,但我不太确定如何添加更多行,以及如何使用输入的值。
import tkinter
from tkinter import *
class Squares:
root = Tk()
root.title('Random')
x = Label(text='How many squares? (ex: 4x4, 5x3)').pack(side=TOP,padx=10,pady=10)
Entry(root, width=10).pack(side=TOP,padx=10,pady=10)
Button(root, text='OK').pack(side= LEFT)
Button(root, text='CLOSE').pack(side= RIGHT)
2 个回答
1
如果你不需要文本框的轮廓线,使用create_text会是最简单的选择,尽管它没有自动换行的功能(至少在Python 3中你可以做到这一点):
from tkinter import *
tk = Tk()
canvas = Canvas(tk, 1000, 1000)
canvas.pack()
canvas.create_text(200, 200, text="Example Text")
试试看吧!
8
你这里有几个问题。
我不太清楚这个 Squares
类到底是想干嘛,但它基本上没什么用。你在定义这个类的时候写了一堆代码,创建了一些变量(这些变量会变成类的属性,所有这个类的实例都会共享),然后就没了。与其试图猜测你想要的功能,不如直接把这个类扔掉,把所有代码放到模块级别。
你从来没有调用过 root.mainloop()
,所以你的程序只会定义一个图形界面,但根本不会运行它。
你的按钮没有绑定任何功能,所以它们根本无法产生效果。你需要创建一个能做事情的函数,然后把它作为 command
参数传进去,或者稍后用 .bind
绑定。
你没有保存任何控件的引用,所以之后无法访问它们。如果你想从输入框中获取值,你需要有办法引用它。(唯一的例外是你的 x
变量,但它会是 None
,因为你把它设置成了调用 pack
方法的结果,而不是 Label
本身。)
一旦你解决了这些问题,你只需要解析这个值,这个过程其实很简单。
把这些都放在一起:
import tkinter
from tkinter import *
root = Tk()
root.title('Random')
Label(text='How many squares? (ex: 4x4, 5x3)').pack(side=TOP,padx=10,pady=10)
entry = Entry(root, width=10)
entry.pack(side=TOP,padx=10,pady=10)
def onok():
x, y = entry.get().split('x')
for row in range(int(y)):
for col in range(int(x)):
print((col, row))
Button(root, text='OK', command=onok).pack(side=LEFT)
Button(root, text='CLOSE').pack(side= RIGHT)
root.mainloop()
你只需要把那个 print
改成做一些有用的事情,比如创建方块。