python - Tkinter 将数据从数据库显示到新窗口
问题描述
我正在制作一个具有查看数据库功能的管理系统。我想让它在用户单击“查看列表”按钮时弹出一个显示数据库的新窗口。我将“列表”函数保存为新的 .py 文件,并使用主文件中的以下代码调用它
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()
解决方案
你可以使用正常的方式 - import list
- 然后再执行list.list()
。这样,您应该可以更好地控制 Windows。
但它需要用来Toplevel
创建第二个窗口。
最小的工作示例。
主文件
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()
列表.py
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)
顺便说一句:在您的版本中,您可能忘记执行list()
编辑:
检查窗口是否尚未打开main.py
的版本(相同)
列表.py
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)
推荐阅读
- c++ - 我如何将 Cilk Plus Extensions 应用于这个简单的 C++ 代码?
- format - MIFARE 的 ATS 中的历史字节是什么以及在哪里?
- user-interface - JavaFX:如何在显示前获取标签的宽度?
- c - 如何将一个数组中的特定字符串链接到另一个数组中的第二个字符串?
- c# - 如何使用 c# 获取 Azure Blob 存储容器中现有目录的列表?
- php - Codeigniter - Sweetalert 在控制器中不起作用
- openstreetmap - 更新交通信息 OSRM
- c++ - 如何使用 NtQueryInformationThread 查找堆栈的基地址?
- java - 我在一个包含数组列表的子类上有一个构造函数,并且对构造函数的调用在使用 Java 时给了我一个错误
- crystal-reports - 当子报表没有数据时抑制主报表中的记录