首页 > 解决方案 > 使用带有复选按钮的网格和 tkinter 添加滚动条

问题描述

我已经看到了这个问题的多个其他答案,其中包括添加画布和框架等解决方案,但每次我尝试这样做时,检查按钮都不会显示在我的窗口中。

这段代码基本上是显示一个窗口,其中列出了带有复选按钮的 chrome 历史记录,并允许用户选择他们想要删除的内容。当他们向下滚动并单击“删除”按钮时,历史记录将被清除。

我已经设法使除了滚动条之外的所有东西都能正常工作。

import sqlite3
import os
from tkinter import *

path = os.path.expanduser('~/AppData/Local/Google/Chrome/User Data/Default/History')
conn = sqlite3.connect(path)
cur = conn.cursor()
select_statement = "SELECT urls.url FROM urls, visits WHERE urls.id = visits.url;"
cur.execute(select_statement)
results = cur.fetchall()

root = Tk()
text = root

# window title
title = Label(root,text = "Check the websites you want to delete : \n", justify = LEFT)
title.grid(row=1,column=0)

# Removing the files from the sql database
ids=[]
def delHis():
    global cbs
    for name, checkbutton in cbs.items():
        if checkbutton.var.get():
            for rows in cur.execute('''SELECT urls.id,urls.url FROM urls,visits WHERE urls.id = visits.url AND urls.url = (?); ''', [checkbutton['text']]):
                print(rows)
                id = rows[0]
                ids.append((id,))
            cur.executemany('''DELETE FROM visits WHERE id = ?''', ids)
            cur.executemany('''DELETE FROM urls WHERE id = ?''', ids)
            conn.commit()

# Creating the checkbuttons
cbs = dict()
for i,value in enumerate(results):
    cbs[value] = Checkbutton(text, text = value, onvalue=True,offvalue=False, wraplength=500, )
    cbs[value].var = BooleanVar(text, value=False)
    cbs[value]['variable'] = cbs[value].var
    cbs[value].grid(row=i+3, column=0)

# delete button that links to delHis()
button = Button(text, text='Delete')
button.config(height = 2, width = 50, bg = '#ff6666', fg = '#ffffff', command=delHis)

try:
    button.grid(row=i+8, column=0)
except:
    title = Label(text, text="History is empty", justify=LEFT)
    title.pack()

text.grid()
root.mainloop()

我对这一切都很陌生,所以请具体一点。谢谢你。

标签: pythonpython-3.xtkinterscrollgrid

解决方案


推荐阅读