2

私は電子書籍からPythonを学んでいます。今、私はTkinterモジュールについて学んでいます

本は、次のコードを実行することを提案しました。ただし、正常に動作しません。理由はありますか?

from Tkinter import *

window = Tk()
window.geometry("200x200")

my_frame = Frame()
my_frame.pack

button1 = Button(my_frame, text = "I am at (100x150)")
button1.place(x=100, y=150)

button2 = Button(my_frame, text = "I am at (0 x 0)")
button2.place(x=0, y=0, width=100, height=50)

window.mainloop()

私が得るべきもの:

理想の結果

私が得るもの:

実際の結果

とを追加するbutton1.pack()button2.pack()、次のようになります。

別のジオメトリ マネージャを使用した結果

4

5 に答える 5

8
  1. 使用しないでくださいplacepackまたはの使い方を学びますgrid。によって管理されるウィジェットplaceは、それを含む親のサイズには影響しません。サイズをmy_frame指定せず、ウィンドウを埋めるようにパックしないため、高さ 1 ピクセル、幅 1 ピクセルしかありません。これにより、それ (およびその中のウィジェット) が事実上非表示になります。どうしても使用しplaceたい場合は、サイズを指定するかmy_frame、親を埋めるオプションをパックする必要があります。
  2. my_frame.packである必要がありますmy_frame.pack()(末尾の括弧に注意してください)

説明よりも簡単な修正に関心がある場合は、次のmy_frameようにパックします。

my_frame.pack(fill="both", expand=True)

コードを修正するために必要なのはこれだけです。

于 2015-03-17T15:17:45.240 に答える
1

関数を呼び出すのを忘れましたmyframe.pack-関数名をそこに置いただけで、これは有効なステートメントですが、フレームは「パック」されていませんでした window(フレームがウィンドウ全体を埋めるように塗りつぶしと展開も追加しました。動作しません)。これはうまくいくはずです:

from Tkinter import *

window = Tk()
window.geometry("200x200")

my_frame = Frame(window)
my_frame.pack(fill=BOTH, expand=True)

button1 = Button(my_frame, text = "I am at (100x150)")
button1.place(x=100, y=150)

button2 = Button(my_frame, text = "I am at (0 x 0)")
button2.place(x=0, y=0, width=100, height=50)

window.mainloop()
于 2015-03-17T15:34:27.170 に答える
-1

ボタンは Frame 内に配置されましたmy_frameが、 の後にかっこがないため、フレーム自体は画面に表示されませんでしたmy_frame.pack。また、フレーム自体のサイズを括弧内に示し、ボタンを含めるのに十分な大きさにする必要があります

さらに、あるウィジェットに place を使用して別のウィジェットに pack を使用することはできません。配置システムはコード全体で一貫している必要があります。動作するように編集されたコードは次のとおりです。

from Tkinter import *

window = Tk()
window.geometry("200x200")

my_frame = Frame(window)
my_frame.place(x=0, y=0, width=200, height=200)

button1 = Button(my_frame, text = "I am at (100x150)")
button1.place(x=100, y=150, width=100, height=50)

button2 = Button(my_frame, text = "I am at (0 x 0)")
button2.place(x=0, y=0, width=100, height=50)

window.mainloop()
于 2015-03-17T15:15:30.397 に答える