2016-11-16 17 views
1

私のプログラムの別のメインファイルから呼び出すスクリプトを.pyファイルに書きました。しかし、私がそれをすると、それは初期化されず、直接実行されたときと同じ出力が得られます。tkinter pyスクリプトは別のスクリプトから呼び出されたときに出力が異なります

ここで私はモジュールとしてサブテストファイルをインポートし、ユーザーがボタンをクリックしたときにそれを呼び出すメインファイルのコードです:

#!/usr/bin/python 
import tkinter as tk 
from tkinter import ttk 

import subTest 
from subTest import SubTest 

class Window(tk.Tk): 

    def __init__(self, parent): 
     tk.Tk.__init__(self, parent) 
     tk.Tk.wm_title(self, "Test") 
     self.parent = parent 
     self.initialize() 

    def initialize(self): 
     self.geometry("600x300+30+30") 
     label = tk.Label(self, text="Test") 
     label.pack(pady=20,padx=10) 
     self.button = ttk.Button(self, text='gotosubtest', command = self.callsubtest) 
     self.button.pack() 

    def callsubtest(self):  
     app = SubTest(None) 
     app.mainloop() 

if __name__ == "__main__": 
    window = Window(None) 
    window.mainloop() 

と、ここで入力テキストを含むサブテストファイルのコードですが、 320で初期化されるべきである。これは問題の単純化された例である。 subTestを直接実行すると、このエントリのデフォルト値がテキストボックスに表示されます。しかし、mainからsubTestを呼び出すと、値は表示されません。 私のコードに何が悪いと思いますか? Pythonの初心者のためのすべての有用なヒントに事前のおかげで、あなたは唯一のプログラムでTkの単一のインスタンスを持つことができます)

#!/usr/bin/python 
import tkinter as tk 
from tkinter import Entry 

class SubTest(tk.Tk): 

    def __init__(self, parent): 
     tk.Tk.__init__(self, parent) 
     tk.Tk.wm_title(self, "SubTest") 
     self.parent = parent 
     self.initializesubtest() 

    def initializesubtest(self): 
     self.geometry("510x480") 

     self.minx = tk.DoubleVar() 
     self.minx.set(320) 
     Entry(self, textvariable=self.minx,width=5).grid(row=21,column=1) 
     tk.Label(self, text="Min X").grid(row=22,column=1) 

if __name__ == "__main__": 
    app = SubTest(None) 
    app.mainloop() 

答えて

0

。その他のモジュールを使用すると、2番目のルートウィンドウが作成されます。その2番目のモジュールを最初のモジュールで使用できるようにするには、独自のルートウィンドウを作成することはできません。

+0

ありがとうございます!サブテストスクリプトtk.TkをToplevelで置き換えるように見えますが、それは動作します。 – Jeremie

関連する問題