0

私はPythonが初めてで、tkinterの使用中にモジュールを作成しようとして立ち往生しています。トップメニューに使用したいメインモジュールと、tkinterオブジェクトも使用するレポートを含む別のモジュールがあります。

最初のスクリプトは以下のように main.py です

       from Tkinter import *
       from wind import *
       menu=Tk()
       menu.geometry('200x200')
       Button(menu,text="push",command=wind.gui).pack()
       menu.mainloop()

2 番目のスクリプトは、次のように wind.py です。

  from Tkinter import *

  class wind:
  @staticmethod
  def getting():
       print y2,y2.get()

  @staticmethod
  def gui():
      global y2
      main=Tk()
      main.geometry('300x300+100+100')
      y2=StringVar()
      Entry(main, textvariable=y2, width=40).pack()
      Button(main, text="Run", command=wind.getting).pack()
      main.mainloop()

コードは正常に動作するようです。ただし、tkinter ボタンの y2 の値は空になります。どんな助けでも大歓迎です!!

4

1 に答える 1

0

ブライアンはすぐそこにいます。2 つのメインループの使用は、私には少し奇妙に見えます。Tkinter で 2 次ループを起動する場合がありますが、このようにはなりません。

y2 が定義されている場所もわかりませんが、モジュール内のグローバルは、プログラム全体のグローバル空間ではなく、そのモジュールのグローバル空間を指します。少なくとも、globals() 関数に関するこのメモを解釈する方法と、それがおそらく global キーワードにどのように関連するかを解釈します。

wind.py に次の変更を加えたところ、プログラムからより適切な応答が得られました。

from Tkinter import *

y2 = None

class wind:
    @staticmethod
    def getting():
        print y2, y2.get()

    @staticmethod
    def gui():
        global y2
        main=Toplevel()
        main.geometry('300x300+100+100')
        y2 = StringVar()
        Entry(main, textvariable=y2, width=40).pack()
        Button(main, text="Run", command=wind.getting).pack()
        #main.mainloop()

y2 を wind.py モジュールの実際のグローバル レベル変数にし、main を Toplevel() ウィジェットにし、gui() の最後にある誤った mainloop() をコメント アウトしたことに注意してください (すでにメイン ループに入っているため)。最初のウィンドウ)。

于 2012-05-18T22:20:36.877 に答える