私は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:
私はエラーを取得していないのです、BUTフェッチした結果は2番目のウィンドウに表示されず、タイトルはMenu
で初期化されたself.master.title('Dataset')
ではありません。
私はMenu
クラスを見なくても空のウィンドウを作成しているような気がしますか?
ソリューション:どういうわけか
python className not defined NameError
(理由を説明することはできません)私は "名前は「DEFでダウンブロック移動(くぼみが正しかったとしても)それが働きました。
間違いはありますか?この 'root2 = Toplevel(self.master)'行は成功しているので、 'Toplevel'ウィンドウは空で親のタイトルですが、その後は' Menu'に接続する際に何らかのエラーがあります。私はあなたのコードを 'sqlite3'のもので試してみましたが、[それはうまくいくようです](https://i.stack.imgur.com/mYItk.png)! – CommonSense
編集しました、もっと鮮明になったことを願って PS:あなたはラベルを見て何が変わったのですか? – Hendrik
https://stackoverflow.com/questions/2386714/why-is-import-badメニューはtkinterクラスです。これで私が思うような問題が表示されます。 – brodeur