Текст этикетки Tkinter перекрывается в определенном цикле - PullRequest
0 голосов
/ 17 мая 2018

Я работаю над «простым» интерфейсом поиска, использующим 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()

Код работает, как задумано, если я ищу слова, которые найдены в базе данных.Если я ищу слово, которого нет в базе данных, мой следующий поиск с присутствующим словом будет перекрывать предыдущий вывод.Наоборот, если я только ищу элементы, не найденные в базе данных, метка обновляется, как и ожидалось.Когда эти петли "чередуются", у меня возникают проблемы.Что в мире происходит?

1 Ответ

0 голосов
/ 18 мая 2018

Хотите ли вы загружать определения из файла каждый раз, когда вы звоните fetch()? Думаю, нет. Я поместил определения вне функции. Кроме того, вместо загрузки определений из файла я просто определяю набор случайных сыров для целей тестирования.

Вы создаете новую метку result_out для каждого вопроса, на которую указывает @Paul Cornelius. Лучше назначить текстовую переменную метке и использовать ее для изменения текста. Итак, создайте этот ярлык и вне функции.

from tkinter import *

definitions = ['Stilton','Cheshire','Tilsit','Brie'] # Instead of file read

def fetch():
    word = e1.get()
    if not (word in definitions):
        output_string = word + " not in database"
    else:
        output_string = "Found " + word
    query.set(output_string) # Set result_out to output_string

master = Tk()

word_entry = Label(master, text = "word")
word_entry.grid(row=0, column = 0)

e1 = Entry(master)
e1.grid(row=0, column=1)

query = StringVar() # Use StringVar to interact with result_out
result_out = Label(master, textvariable=query)
result_out = result_out.grid(row=3, column = 0)

Button(master, text='Search', command=fetch).grid(row=2, column=1,
                                                  sticky=(N, S, W, E), pady=4)

mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...