2016-11-16 1 views
1

J'ai écrit un script dans un fichier .py que je voudrais appeler à partir d'un autre fichier principal de mon programme. Mais quand je fais cela, il ne s'initialise pas et donne le même résultat que lorsqu'il est exécuté directement.Le script tkinter py donne une sortie différente lorsqu'il est appelé depuis un autre script

est ici le code du fichier principal où j'importer le fichier sous-test en tant que module et l'appeler lorsque l'utilisateur clique sur un bouton:

#!/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() 

et voici le code du fichier Subtest contenant un texte d'entrée boîte qui devrait être initialisée à 320. Ceci est un exemple simplifié du problème. Lorsque subTest est exécuté directement, cette valeur par défaut de l'entrée est affichée dans la zone de texte. Mais quand subTest est appelé depuis le main, la valeur n'est pas affichée. Une idée de ce qui ne va pas avec mon code? merci d'avance à tous les conseils utiles pour un débutant python;)

#!/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() 

Répondre

0

Vous ne pouvez avoir qu'une seule instance de Tk dans un programme. Lorsque vous utilisez cet autre module, vous créez une seconde fenêtre racine. Pour que vous puissiez utiliser ce second module dans le premier, il ne peut pas créer sa propre fenêtre racine.

+0

Merci! il semble en remplaçant dans le script subTest tk.Tk par Toplevel, cela fonctionne. – Jeremie