2014-11-21 80 views
0

我对python真的很陌生,只是为了让我的头绕它而行,这里是我迄今为止的内容。我已经创建了一个父窗口“root = Tk()”,我试图切换到一个新的(打开一个新窗口“Class window2”)在tkinter中打开和关闭窗口遇到问题

所以我希望你能理解我的废话。如果你选择帮助谢谢(Y)

#!/usr/bin/env python  
import sqlite3 
import Tkinter as tk 
from Tkinter import * 

conn = sqlite3.connect('Logindetails.db') 
c = conn.cursor() 
column_name = "Username" 
attempts = 3 

class welcomewindow(): 

    def __init__(self,master): 
     self.master = master 
     self.frame = tk.Frame(master) 
     self.lbl = Label(master, text="Please Login") 
     self.lbl.pack() 

     self.lbl1 = Label(master, text="Username") 
     self.lbl1.pack() 
     userName=StringVar(None) 
     self.userBox = Entry(master, textvariable=userName) 
     self.userBox.pack() 

     self.lbl2 = Label(master, text="Password") 
     self.lbl2.pack() 
     passWord=StringVar(None) 
     self.passBox = Entry(master, show="*", textvariable=passWord) 
     self.passBox.pack() 

     self.logoutbut = Button(master, text="Login", width=20, command=self.Loginprocess) 
     self.logoutbut.pack(side='bottom', padx=15, pady=15) 

     self.exitbut = Button(master, text="Exit", width=20, command=self.exitProgram) 
     self.exitbut.pack(side='bottom', padx=15, pady=15) 

    def exitProgram(self): 
     self.master.destroy() 

    def Loginprocess(self): 
     global attempts 

     while attempts < 4 and attempts >= 0: 
      print "attempts left = " + str(attempts) 
      self.name = self.userBox.get() 
      self.password = self.passBox.get() 
      if self.password == "" or self.name == "": 
       attempts -= 1 
      else: 
       self.Checkrecord() 

    def Checkrecord(self): 
     global attempts 
     conn = sqlite3.connect('Logindetails.db') 
     cursor = conn.cursor() 
     query = "SELECT * FROM Logindetails WHERE Username=? ORDER BY {0}".format(column_name) 
     cursor.execute(query, (self.name,)) 
     for row in cursor: 
      if self.name in row and self.password in row: 
       self.app = Window2(root) 
       welcomewindow.destroy() 
      else: 
       attempts -= 1 
       return 

class Window2(): 

    def __init__(self, master): 
     self.master = master 
     self.frame = tk.Frame(master) 
#  self.title("Cinema Booking System") 
#  self.geometry("250x250") 












root = Tk() 
root.title("Cinema Booking System") 
root.geometry("250x250") 
cls = welcomewindow(root) 
root.mainloop() 

回答

1

框架默认情况下具有零宽度,因为没有任何理由显示一个空的容器,所以把东西在其中。你还要导入Tkinter两次。选择一个或另一个。

import Tkinter as tk 

class WelcomeWindow(): 

    def __init__(self,master): 
     self.master = master 
     ##self.frame = tk.Frame(master) not used 
     self.lbl = tk.Label(master, text="Please Login") 
     self.lbl.pack() 

     self.lbl1 = tk.Label(master, text="Username") 
     self.lbl1.pack() 
     userName=tk.StringVar(None) 
     self.userBox = tk.Entry(master, textvariable=userName) 
     self.userBox.pack() 

     self.lbl2 = tk.Label(master, text="Password") 
     self.lbl2.pack() 
     passWord=tk.StringVar(None) 
     self.passBox = tk.Entry(master, show="*", textvariable=passWord) 
     self.passBox.pack() 

     self.logoutbut = tk.Button(master, text="New Window", width=20, 
        command=self.Checkrecord) 
     self.logoutbut.pack(padx=15, pady=15) 

     self.exitbut = tk.Button(master, text="Exit", width=20, command=self.exitProgram) 
     self.exitbut.pack(padx=15, pady=15) 

    def Checkrecord(self): 
     self.app = Window2(self.master) 

    def exitProgram(self): 
     self.master.quit() 

class Window2(): 

    def __init__(self, master): 
     self.master = master 
     self.frame = tk.Frame(self.master) 
     self.frame.title="Cinema Booking System" 
     self.frame.pack(side="bottom") 

     tk.Label(self.frame, text="Inside the new frame", bg="orange").pack() 

root = tk.Tk() 
root.title("Cinema Booking System") 
root.geometry("250x250") 
cls = WelcomeWindow(root) 
root.mainloop() 
+0

谢谢你,有点排序我的问题,除了从上一课的所有文本框和标签仍然存在,我将如何删除这些?非常感谢你的回复。 – 2014-11-22 21:16:43

+0

没关系分类!非常感谢你让我走上正轨。 – 2014-11-22 22:13:04

+0

实际上,框架的默认宽度和高度为1,而不是零。 – 2014-11-22 22:22:00