首页 > 解决方案 > 将信息从 MySQL 数据库打包到 tkinter 盒的最佳方式

问题描述

我创建了一个带有用户名、分数和日期的 MySQL 数据库。我想将 10 行数据打包到我制作的 tkinter 盒子上,但是我不知道最好的方法。我尝试将信息设为标签:

def print_result():
global other_information
other_information = 3
myresult = mycursor.fetchall()
for result in myresult:
    global result_label
    result_label = Label(text=result)
    result_label.pack()
back_radio.pack()

虽然这成功地打包了 tkinter 盒子上的数据行,但当我尝试 pack_forget() 时,只有最后一行解包,其余数据留在 tkinter 盒子上。这是我的解包代码:

elif other_information == 3:
result_label.pack_forget()
back_radio.pack_forget()
display()

所以我决定尝试把它放在一个文本小部件中:

def print_result():
    myresult = mycursor.fetchall()
    for result in myresult:
        global result_text
        result_text = Text(game, height=300, width=300)
        result_text.insert('1.0', result)
        result_text.pack()
    back_radio.pack()

然而,这只打包了一行数据,我的单选按钮不会出现。在 tkinter 盒子上显示数据行的最佳方式是什么,我将如何解压它?

谢谢!

标签: pythonmysqlpython-3.xtkinterwidget

解决方案


如果您想在 tkinter gui 上显示查询结果,那么您可以使用Scrolledtext(最好)或任何其他Text小部件并将结果插入到它上面。您可以使用名为tabulate. 使用以下内容作为参考 -

from tabulate import tabulate
import tkinter as tk
from tkinter.scrolledtext import ScrolledText

class Root(tk.Tk):
    fetch_data = [(None, 21, 20, 20, 20, 20), (8, None, 8, 8, 8, 8)]
    fetch_col = ['TEACHER', 'STUDENT', 'A', 'B', 'C', 'D']
    def __init__(self):
        super().__init__()

        h_scrlbar = tk.Scrollbar(self, orient='horizontal')
        h_scrlbar.pack(side='bottom', fill='x')

        self.res_tbl = ScrolledText(self, font=(
            'Consolas', 14), wrap='none', xscrollcommand=h_scrlbar.set)
        self.res_tbl.pack(fill='both', expand=1)
        h_scrlbar.config(command=self.res_tbl.xview)

        pr = tabulate(Root.fetch_data, Root.fetch_col, tablefmt='psql', missingval='-')
        self.res_tbl.insert(0.0, pr)

if __name__ == '__main__':
    Root().mainloop()

where fetch_data&fetch_col可以改为从 sql 查询结果中获取。


推荐阅读