1

如何在 tkinter 的条目小部件中创建多行并使用这些输入来创建一些东西?例如,我想要一个文本框小部件出现并询问用户:

How many squares do you want? (ex: 4x4, 5x5)
What color do you want them?

通过用户输入,我想在特定的高度/宽度中创建那么多 x 数量的正方形并指定颜色等。我对 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)
4

2 回答 2

8

你在这里有很多问题。

我不确定这Squares门课应该做什么,但它基本上什么也没做。当您定义类时,您有一堆代码在运行,创建了一些变量(最终将作为类属性,由类的所有实例共享),并且……就是这样。而不是试图弄清楚你在这里想要什么,我只是要废弃这个类并使其成为模块级代码。

你永远不会调用root.mainloop(),所以你的程序只会定义一个 GUI,然后永远不会运行它。

您不会将按钮绑定到任何东西,因此它们无法产生任何效果。您需要创建某种功能来做某事,然后将其作为command参数传递,或者.bind稍后传递。

您不存储任何控件的引用,因此以后无法访问它们。如果要从条目中获取值,则需要某种方式来引用它。(例外是您的x变量,但这将是None,因为您将其设置为调用 的结果packLabel而不是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来做一些有用的事情,比如创建正方形。

于 2013-03-09T02:16:44.947 回答
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")

试试看!

于 2015-02-12T23:59:25.740 回答