2017-05-23 8 views
0

私はPython 3.xを使用しており、データセットレコードをフェッチして追加のウィンドウに表示しようとしています。私は血まぬ初心者で、現在私は自分のエラーが表示されません。私は複数のスレッドをチェックしましたが、解決策を得られませんでした。デバッグも私を助けません。ここでTkinterを使用した複数のGUI

は私のアプローチです:

import sqlite3 
from tkinter import * 

class Overview(): 
    def __init__(self,master): 
     self.master = master 
     self.master.geometry('170x110+100+200') 
     self.master.title('Welcome!') 
     self.button1 = Button(self.master, text="Show dataset", fg='green', command=self.gotoMenu).grid(
      row=1, column=1) 

    def gotoMenu(self): 
     # This is the Dataset GUI# 
     root2 = Toplevel(self.master) 
     myGUI = Menu(root2) 

def main(): 
     root = Tk() 
     overviewGUI = Overview(root) 
     root.mainloop() 

if __name__ == '__main__': 
    main() 


class Menu: 
    def __init__(self,master): 
     # This is the Dataset GUI# 

     self.connection = sqlite3.connect('test.db') 
     print("Opened database successfully") 
     self.cur = self.connection.cursor() 

     self.master = master 
     self.master.title('Dataset') 
     self.master.geometry("320x240") 
     print("GUI created") 
     self.dateLabel = Label(self.master, text="Date", width=10) 
     self.dateLabel.grid(row=0, column=0) 
     self.BMILabel = Label(self.master, text="Name", width=10) 
     self.BMILabel.grid(row=0, column=1) 
     self.stateLabel = Label(self.master, text="ID", width=10) 
     self.stateLabel.grid(row=0, column=2) 
     self.insertDS('random') 
     self.showallrecords() 

    def showallrecords(self): 
     data = self.readfromdatabase() 
     for index, dat in enumerate(data): 
      Label(self.master, text=dat[2]).grid(row=index + 1, column=0) 
      Label(self.master, text=dat[1]).grid(row=index + 1, column=1) 
      Label(self.master, text=dat[0]).grid(row=index + 1, column=2) 

    def readfromdatabase(self): 
     self.cur.execute("SELECT * FROM LOGGING") 
     return self.cur.fetchall() 

    def createTable(self): 
     try: 
      self.connection.execute(
       "CREATE TABLE LOGGING(ID INTEGER PRIMARY KEY AUTOINCREMENT,NAME TEXT NOT NULL, TIMESTAMP DATE DEFAULT (datetime('now','localtime')));") 
      print("Table created successfully") 

     except: 
      print("Table already exists") 

    def insertDS(self, name): 
     self.connection.execute("INSERT INTO LOGGING (NAME) \ 
      VALUES (?);", [name]) 
     self.connection.commit() 
     print("Records created successfully") 

私のアプリケーションは、ボタンの上に、私は「メニュー」クラスから全て取り出されたデータセットを見たいと思ってクリックし、「概要」をGUIで起動する必要があります。

ただし、次のウィンドウが空で、「データセット」であるべき「ようこそ」のタイトルを持っているボタンをクリックした後

UPDATE:

Example

私はエラーを取得していないのです、BUTフェッチした結果は2番目のウィンドウに表示されず、タイトルはMenuで初期化されたself.master.title('Dataset')ではありません。

私はMenuクラスを見なくても空のウィンドウを作成しているような気がしますか?

ソリューション:どういうわけか

python className not defined NameError

(理由を説明することはできません)私は "名前は「DEFでダウンブロック移動(くぼみが正しかったとしても)それが働きました。

+0

間違いはありますか?この 'root2 = Toplevel(self.master)'行は成功しているので、 'Toplevel'ウィンドウは空で親のタイトルですが、その後は' Menu'に接続する際に何らかのエラーがあります。私はあなたのコードを 'sqlite3'のもので試してみましたが、[それはうまくいくようです](https://i.stack.imgur.com/mYItk.png)! – CommonSense

+0

編集しました、もっと鮮明になったことを願って PS:あなたはラベルを見て何が変わったのですか? – Hendrik

+0

https://stackoverflow.com/questions/2386714/why-is-import-badメニューはtkinterクラスです。これで私が思うような問題が表示されます。 – brodeur

答えて

0

メニューをオーバーロードしました。クラス名を別の名前で変更してください。 インポートを使用しないでください*

+0

例外 トレースバック(最新の呼び出しの最後): ライン15、gotoMenu でmyGUI =データセット(root2) NameError:名「データセット」が に定義されていませんが(メニューからクラスデータセット 'にクラス名を変更しました): ' – Hendrik

関連する問題