0

だから私はゲームを作成していますが、今は GUI を追加することにしました。GUI コードは次のように表示されます。

master = Tk()
master.wm_title("Main Menu")

a = Button.grid(master, text = "DOMINATE!", command = difficulty)
a.grid(row = 0, column = 0)
a.pack()
mainloop()

b = Button.grid(master, text = "Patch Notes", command = changelog)
b.grid(row = 0, column = 1)
b.pack()
mainloop()

c = Button.grid(master, text = "Credits", command = credit)
c.grid(row = 1, column = 0)
c.pack()
mainloop()

d = Button.grid(master, text = "Rules", command = rules)
d.grid(row = 1, column = 1)
d.pack()
mainloop()

e = Button.grid(master, text = "Quit", command = exit)
e.grid(row = 2, column = 0)
e.pack()
mainloop()

関数 * は既に Tkinter からインポートしていますが、これは 1200 行のコードのほんの一部です。実行しようとすると、次のエラーが発生します。

TypeError: バインドされていないメソッド grid_configure() は、Button インスタンスを最初の引数として呼び出す必要があります (代わりに Tk インスタンスを取得)

(Python は私にとって新しい言語のようなものです。明らかなことやばかげたことを見逃して申し訳ありません。私はプログラミングも初めてです)。

4

3 に答える 3

1

次のようなものが必要です。

a = Button(master, text = "DOMINATE!", command = difficulty)
a.grid(row=...,column=...)

また、しないでください

a.grid(...)
a.pack(...)

同じウィジェットで (または同じウィジェット内でさえ) とを使用するpackgrid、2 つのジオメトリ マネージャー間で適切なレイアウトをネゴシエートしようとして、コンピューターが永遠に放置されたままになる可能性があります。パックのみ、またはグリッドのみを使用してください。

最後に、最後のmainloop(). 他のものはすべて削除する必要があります。ただし、1200 行のコードがある場合、これらを修正すると他のエラーが発生するのではないかと思います。

于 2012-07-23T20:30:15.720 に答える
0

「unbound method grid_configure() must be called with Button instance...」というエラーは、次のような行から発生します。

a = Button.grid(...)

上記は、クラスのインスタンスではなくgrid、クラスでメソッドを呼び出そうとしています。一般的に言えば、「バインドされていないメソッド」エラーはまさにそれを意味します-インスタンスではなくクラスでメソッドを呼び出そうとしています。ButtonButton

代わりに、最初にButtonクラスのインスタンスを作成してgridから、そのインスタンスを呼び出す必要があります。例えば:

a = Button(...)
a.grid(...)

また、同じウィジェットに対して と の両方packを使用しても意味がありません。gridどちらかを使用してください。を使用するgrid場合は、電話する必要はありませんpack

最後に、mainloopすべてのウィジェットが作成された後に一度だけ呼び出されるように設計されています。

関連するメモとして、私の経験では、すべてのレイアウト コード ( gridpackおよびplace) をまとめると、GUI コードの保守がはるかに簡単になります。アプリ全体ですべてをまとめている必要はありませんが、少なくとも含まれているウィンドウごとにグループ化されています。たとえば、これの代わりに:

a = Button(...)
a.grid(...)
b = Button(...)
b.grid(...)
...

...次のようにすることをお勧めします:

a = Button(...)
b = Button(...)
...
a.grid(...)
b.grid(...)

この種のコード構成により、同じ行または列に複数の項目があるなどのレイアウトの問題を見つけやすくなります。

于 2012-07-23T21:16:59.047 に答える