微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用内部函数时,代码不起作用为什么?

如何解决使用内部函数时,代码不起作用为什么?

我正在tkinter(ttk)中创建一个sqlite3 GUI界面,但是我陷入了一半。请参见下面的代码

import sqlite3
from tkinter import ttk
import tkinter as tk
root = tk.Tk()
conn = sqlite3.connect('contact.sqlite3')
conn_cursor = conn.cursor()
res = conn.execute("SELECT name FROM sqlite_master WHERE type='table';")
tables = tuple([tbl_name[0] for tbl_name in res])

table_chooser = ttk.ComboBox(root)
table_chooser['values'] = tables
table_chooser.grid(row=0,column=0)
def view_table(): 
    selected_table = 'contacts' #table_chooser.get()
    table_names = conn.execute(f'''SELECT * FROM pragma_table_info('%{selected_table}%')''')
    column_header = [nam[1] for nam in table_names]
    stringvar_header = [tk.StringVar() for _ in column_header]
    alldb = conn.execute(f'''SELECT * FROM {selected_table} ''').fetchall()
    stringvar = [[tk.StringVar() for _ in alldb[0]] for _ in alldb]
    def header_entry(i):
        stringvar_header[i].set(column_header[i])
        return ttk.Entry(root,textvariable=stringvar_header[i],state="disabled").grid(row=1,column=i)

    def create_entry(i,j):
        stringvar[i][j].set(alldb[i][j])
        return ttk.Entry(root,textvariable=stringvar[i][j]).grid(row=i+2,column=j)

    h_entry = [header_entry(i) for i in range(len(column_header))]
    entry = [[create_entry(i,j) for j in range(len(alldb[0]))] for i in range(len(alldb))]
view_table()          
#ttk.Button(root,text="view",command=view_table).grid(row=0,column=2)

root.mainloop()

问题是,如果我们运行下面的代码,我们只能看到Entry小部件的空白单元格,但是如果我们直接在代码中编写view_table()函数内容(即不使用function),则可以正常工作 并且您可以看到表“联系人”的所有内容。在条目小部件中。 那么使用功能和不使用功能时会发生什么

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。