首页 > 解决方案 > 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()

这就是我单击“查看客户”按钮时发生的情况,它不显示任何内容

标签: pythonsqltkinter

解决方案


你可以使用正常的方式 - 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)

推荐阅读