【发布时间】:2018-05-17 20:50:05
【问题描述】:
我正在使用 Python 和 Tkinter 开发一个“简单”的搜索界面。这是我所拥有的一些示例代码:
#!/usr/bin/env/python
from tkinter import *
import os
import csv
import sys
def fetch()
word = e1.get()
definitions = []
with open(file) as db:
dbreader = csv.reader(db, delimiter="\t")
for row in dbreader:
if word in row[1]:
definitions.append(row[4])
if not definitions:
output_string = word + " not in database"
else:
output_string = "Found " + word
result_out = Label(master)
result_out.config(text=output_string)
result_out = result_out.grid(row=3, column = 0)
master = Tk()
word_entry = Label(master, text = "word")
word_entry.grid(row=0, column = 0)
e1 = Entry(master)
e1.grid(row=0, column=1)
Button(master, text='Search', command=fetch).grid(row=2, column=1, sticky=(N, S, W, E), pady=4)
mainloop()
如果我正在搜索在数据库中找到的单词,则代码会按预期运行。如果我搜索一个不在数据库中的单词,我下一次搜索存在的单词将与之前的输出重叠。反之亦然,如果我只搜索数据库中未找到的项目,标签会按预期刷新。当这些循环“交替”时,我会遇到问题。到底是怎么回事?
【问题讨论】:
-
每次您的事件处理程序 (
fetch) 运行时,您都会创建一个新标签result_out。您总是将 result_out 放入网格位置 0、3。这会将所有这些标签堆叠在一起。那将是一团糟,几乎可以肯定不是您想要的。由于我无法运行您的代码并且您没有解释您想要它做什么,所以我无法告诉您如何解决这个问题。
标签: python python-3.x user-interface tkinter