私のプログラムの別のメインファイルから呼び出すスクリプトを.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()
ありがとうございます!サブテストスクリプトtk.TkをToplevelで置き換えるように見えますが、それは動作します。 – Jeremie