2015-06-16 3 views
-1

Я начинаю писать код с Python, и в моем первом приложении я достиг кирпичной стены. Любая помощь по поводу того, почему этот код не отображает виджеты, будет с благодарностью!Окно tkinter пустое после выполнения кода

import tkinter 
from tkinter import * 
from tkinter import ttk 
from tkinter import messagebox 

class ImprintPlusApp: 

    def _init_(self, master): 
     self.frame_header = ttk.Frame(master) 
     self.frame_header.pack() 

     ttk.Label(self.header_frame, text = "Bienvenidos a Imprint Plus Manager") 

     self.frame_crearorden = ttk.Frame(master) 
     self.frame_crearorden.pack() 

     ttk.Label(self.frame_crearorden, text = "Nombre").grid(row = 0, column = 0, padx = 5) 
     ttk.Label(self.frame_crearorden, text = "Email").grid(row = 2, column = 0, padx = 5) 
     ttk.Label(self.frame_crearorden, text = "Numero Cel/Tel").grid(row = 4, column = 0, padx = 5) 
     ttk.Label(self.frame_crearorden, text = "Información Adicional").grid(row = 6, column = 0, padx = 5) 

     self.entry_name = ttk.Entry(self.frame_crearorden, width = 24) 
     self.entry_email = ttk.Entry(self.frame_crearorden, width = 24) 
     self.entry_numtc = ttk.Entry(self.frame_crearorden, width = 24) 
     self.entry_addinf = Text(self.frame_crearorden, width = 50, height = 10) 

     self.entry_name.grid(row = 0, column = 1, padx = 5) 
     self.entry_email.grid(row = 2, column = 1, padx = 5) 
     self.entry_numtc.grid(row = 4, column = 1, padx = 5) 
     self.entry_addinf.grid(row = 7, column = 0, columnspan = 2, padx = 5) 

     ttk.Button(self.frame_crearorden, text = "Submit", command = self.submit).grid(row = 8, columnspan = 1, padx = 5) 
     ttk.Button(self.frame_crearorden, text = "Clear", command = self.clear).grid(row = 8, columnspan = 0, padx = 5) 

    def submit(self): 
     print ("Nombre: {}".format(self.entry_name.get())) 
     print ("Email: {}".format(self.entry_name.get())) 
     print ("Num Cel/Tel: {}".format(self.entry_name.get())) 
     print ("Información Adicional: {}".format(self.entry_name.get(1.0, "end"))) 
     self.clear() 
     messagebox.showinfo(tite = "Orden #", message = "Orden Guardada") 

    def clear(self): 
     self.entry_name.delete(0, "end") 
     self.entry_email.delete(0, "end") 
     self.entry_numtc.delete(0, "end") 
     self.entry_addinf.delete(1.0, "end") 


def main(): 
    root = Tk() 
    app = ImprintPlusApp() 
    root.mainloop() 

if __name__ == '__main__': 
    main() 

Каждый раз, когда я запускаю код, я получаю пустое окно tkinter.

ответ

1

У этого было несколько проблем.

  1. Вы имели _init_ метод, а не __init__ метод, поэтому созданный объект не инициализируется.
  2. Вы должны отправить корневой объект tkinter в приложение, с app = ImprintPlusApp(root).
  3. У вас был self.header_frame один раз вместо self.frame_header.
  4. У вас был columnspan = 0 (что недействительно) вместо columnspan = 1 (что действительно не нужно указывать).

Я внес вышеуказанные изменения в код ниже. Это может по-прежнему нуждаться в отладке, поскольку я не знаю точно, какой дизайн вы имели в виду.

import tkinter 
from tkinter import * 
from tkinter import ttk 
from tkinter import messagebox 

class ImprintPlusApp: 

    def __init__(self, master): 
     self.frame_header = ttk.Frame(master) 
     self.frame_header.pack() 

     ttk.Label(self.frame_header, text = "Bienvenidos a Imprint Plus Manager") 

     self.frame_crearorden = ttk.Frame(master) 
     self.frame_crearorden.pack() 

     ttk.Label(self.frame_crearorden, text = "Nombre").grid(row = 0, column = 0, padx = 5) 
     ttk.Label(self.frame_crearorden, text = "Email").grid(row = 2, column = 0, padx = 5) 
     ttk.Label(self.frame_crearorden, text = "Numero Cel/Tel").grid(row = 4, column = 0, padx = 5) 
     ttk.Label(self.frame_crearorden, text = "Información Adicional").grid(row = 6, column = 0, padx = 5) 

     self.entry_name = ttk.Entry(self.frame_crearorden, width = 24) 
     self.entry_email = ttk.Entry(self.frame_crearorden, width = 24) 
     self.entry_numtc = ttk.Entry(self.frame_crearorden, width = 24) 
     self.entry_addinf = Text(self.frame_crearorden, width = 50, height = 10) 

     self.entry_name.grid(row = 0, column = 1, padx = 5) 
     self.entry_email.grid(row = 2, column = 1, padx = 5) 
     self.entry_numtc.grid(row = 4, column = 1, padx = 5) 
     self.entry_addinf.grid(row = 7, column = 0, columnspan = 2, padx = 5) 

     ttk.Button(self.frame_crearorden, text = "Submit", command = self.submit).grid(row = 8, columnspan = 1, padx = 5) 
     ttk.Button(self.frame_crearorden, text = "Clear", command = self.clear).grid(row = 8, columnspan = 1, padx = 5) 

    def submit(self): 
     print ("Nombre: {}".format(self.entry_name.get())) 
     print ("Email: {}".format(self.entry_name.get())) 
     print ("Num Cel/Tel: {}".format(self.entry_name.get())) 
     print ("Información Adicional: {}".format(self.entry_name.get(1.0, "end"))) 
     self.clear() 
     messagebox.showinfo(tite = "Orden #", message = "Orden Guardada") 

    def clear(self): 
     self.entry_name.delete(0, "end") 
     self.entry_email.delete(0, "end") 
     self.entry_numtc.delete(0, "end") 
     self.entry_addinf.delete(1.0, "end") 


def main(): 
    root = Tk() 
    app = ImprintPlusApp(root) 
    root.mainloop() 

if __name__ == '__main__': 
    main() 
+0

Большое вам спасибо за помощь! Это решило мою проблему. – feners