Python Tkinter将数据从数据库显示到新窗口
我正在制作一个具有查看数据库功能的管理系统。我想在用户单击“查看列表”按钮时弹出一个新窗口,显示数据库。我将“list”函数保存为一个新的.py文件,并使用主文件中下面的代码调用它Python Tkinter将数据从数据库显示到新窗口,python,sql,tkinter,Python,Sql,Tkinter,我正在制作一个具有查看数据库功能的管理系统。我想在用户单击“查看列表”按钮时弹出一个新窗口,显示数据库。我将“list”函数保存为一个新的.py文件,并使用主文件中下面的代码调用它 def listCustomer(): call(["python", "list.py"]) 但是,我似乎无法使数据显示在新窗口上,因为每次新窗口都是空窗口。谁能告诉我我做错了什么?我将为下面的list.py文件附加代码 from tkinter import * from
def listCustomer():
call(["python", "list.py"])
但是,我似乎无法使数据显示在新窗口上,因为每次新窗口都是空窗口。谁能告诉我我做错了什么?我将为下面的list.py文件附加代码
from tkinter import *
from PIL import ImageTk,Image
import sqlite3
root = Tk()
def list():
#Create database
connect = sqlite3.connect("hmsdata.db")
#Create cursor
c = connect.cursor()
#List database
c.execute("SELECT *, oid FROM details")
data = c.fetchall()
showData=''
for data in details:
showData += str(data)+"\n"
dataLabel = Label(root, text=showData)
dataLabel.grid(row=0, column=0)
#Commit changes
connect.commit()
#Close connection
connect.close()
这就是我单击“查看客户”按钮时发生的情况,它不显示任何内容
您可以使用常规方法-
导入列表
,然后执行列表.list()
。这样,您就可以更好地控制windows
但它需要使用Toplevel
来创建第二个窗口
最少的工作示例
main.py
import tkinter as tk # PEP8: `import *` is not preferred
import list as ls # `list` is use to create list - don't use this name
# --- functions ---
def on_click():
# run method `list()` from file `list`
ls.list()
# --- main ---
root = tk.Tk()
button = tk.Button(root, text='Second', command=on_click)
button.pack()
root.mainloop()
import tkinter as tk # PEP8: `import *` is not preferred
def list():
second = tk.Toplevel() # create inside function
dataLabel = tk.Label(second, text="Hello World")
dataLabel.grid(row=0, column=0)
import tkinter as tk # PEP8: `import *` is not preferred
second = None # to control if window is open
def on_close():
global second
second.destroy()
second = None # to control if window is open
def list():
global second
if second: # if second is not None:
print('Window already open')
else:
second = tk.Toplevel()
dataLabel = tk.Label(second, text="Hello World")
dataLabel.grid(row=0, column=0)
button = tk.Button(second, text='Close', command=on_close)
button.grid(row=1, column=0)
list.py
import tkinter as tk # PEP8: `import *` is not preferred
import list as ls # `list` is use to create list - don't use this name
# --- functions ---
def on_click():
# run method `list()` from file `list`
ls.list()
# --- main ---
root = tk.Tk()
button = tk.Button(root, text='Second', command=on_click)
button.pack()
root.mainloop()
import tkinter as tk # PEP8: `import *` is not preferred
def list():
second = tk.Toplevel() # create inside function
dataLabel = tk.Label(second, text="Hello World")
dataLabel.grid(row=0, column=0)
import tkinter as tk # PEP8: `import *` is not preferred
second = None # to control if window is open
def on_close():
global second
second.destroy()
second = None # to control if window is open
def list():
global second
if second: # if second is not None:
print('Window already open')
else:
second = tk.Toplevel()
dataLabel = tk.Label(second, text="Hello World")
dataLabel.grid(row=0, column=0)
button = tk.Button(second, text='Close', command=on_close)
button.grid(row=1, column=0)
顺便说一句:在您的版本中,您可能忘记执行
list()
编辑: 检查窗口是否尚未打开的版本(
main.py
相同)
list.py
import tkinter as tk # PEP8: `import *` is not preferred
import list as ls # `list` is use to create list - don't use this name
# --- functions ---
def on_click():
# run method `list()` from file `list`
ls.list()
# --- main ---
root = tk.Tk()
button = tk.Button(root, text='Second', command=on_click)
button.pack()
root.mainloop()
import tkinter as tk # PEP8: `import *` is not preferred
def list():
second = tk.Toplevel() # create inside function
dataLabel = tk.Label(second, text="Hello World")
dataLabel.grid(row=0, column=0)
import tkinter as tk # PEP8: `import *` is not preferred
second = None # to control if window is open
def on_close():
global second
second.destroy()
second = None # to control if window is open
def list():
global second
if second: # if second is not None:
print('Window already open')
else:
second = tk.Toplevel()
dataLabel = tk.Label(second, text="Hello World")
dataLabel.grid(row=0, column=0)
button = tk.Button(second, text='Close', command=on_close)
button.grid(row=1, column=0)
使用普通的
import list
和list.list()
而不是调用([“python”,“list.py]”)
-然后您可以从主脚本中控制第二个窗口。要创建第二个窗口,您需要使用顶级
而不是Tk
,如果这是list.py
中的完整代码,那么您忘了执行函数list()