2014-11-21 34 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