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を呼び出した結果に設定しているため、packそれは になります。)LabelLabel

これが完了したら、あとは値を解析するだけです。これは非常に簡単です。

すべてを一緒に入れて:

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 に答える