Text.insert (tk.INSERT ...) Метод не работает должным образом в Python - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь отобразить некоторые предложения в методе "text.insert" (GUI) tkinter. Предложения являются результатами другой функции. Я сохраняю индексы lsit в другом списке, но когда я пытаюсь напечатать все 5 предложений, я хочу, чтобы он печатал только 2 или 3.

Я пытаюсь напечатать их так: Ans = sent [out [0]], Ans1 = sent [out [1]] .... и я сделал 5 раз, и в конце функции я написал: text1.insert (tk.INSERT, Ans, Ans1 ....) какВ результате появляется только 2 или 3 предложения

import tkinter as tk
from tkinter import *
from collections import Counter
from nltk.tokenize import sent_tokenize, word_tokenize
from tkinter import filedialog
from tkinter.messagebox import *


def my_function():
    global lastScore
    global out
    global sent

    filename = filedialog.askopenfile()
    fileReadyToRead = open(filename.name, 'r')
    file_contents = fileReadyToRead.read()

    data = file_contents

    data = file_contents
    word = word_tokenize(data)
    sent = sent_tokenize(data)

    a = len(sent)
    b = len(word)
    mo = b / a

    number = len(word)

    for x in range(0, number):
        map(str.lower, word[x])

    arraylist = [0] * b
    sentscore = [0] * a

    for x in set(word):
        for i in range(0, a):
            if x in sent[i]:
                sentscore[i] += word.count(x) / mo

    number = len(sent)

    sentList = [0] * number
    listaScore = [0] * number
    lastScore = [0] * number

    for x in range(number):
        sentList[x] = x + 1

    listaScore[0] = listaScore[0] + 0.5
    listaScore[number - 1] = listaScore[number - 1] + 0.5

    for i in range(0, number):
        lastScore[i] = listaScore[i] + sentscore[i]

    out = [i for i in sorted(range(len(lastScore)),
                             key=lastScore.__getitem__, reverse=True)][:5]


def show_answer():

    my_function()
    Ans = "Sentences :  \n",
    Ans0 = out
    Ans00 = out
    Ans1 = sent[out[0]]
    Ans2 = sent[out[1]]
    Ans3 = sent[out[2]]
    Ans4 = sent[out[3]]
    Ans5 = sent[out[4]]

    text1.insert(tk.INSERT, Ans, Ans0, Ans00, Ans1, Ans2, Ans3, Ans4, Ans5)


root = tk.Tk()
root.title("Programm")
text1 = tk.Text(root, heigh=25, width=70)


text1.pack()


button1 = Button(root, text='Result', command=show_answer)
button1.pack()


blank = Entry(root)


def close_window():
    root.destroy()


frame = Frame(root)
frame.pack()


buttonExit = Button(frame, text=" Exit ", command=close_window)
buttonExit.pack()


root.mainloop()

1 Ответ

1 голос
/ 08 октября 2019

Синтаксис метода insert заключается в том, что он принимает индекс, строку, а затем, необязательно, список тегов, другую строку, список тегов, другую строку и т. Д. Каноническая документация по tcl / tk описывает это так:

pathName insert index chars? TagList chars tagList ...?

... Если присутствует несколько пар аргументов chars-tagList, они производят такой же эффект, как если бы для каждой пары была выполнена отдельная команда виджета вставки pathName. Последний аргумент tagList может быть опущен.

Учитывая это утверждение:

text1.insert(tk.INSERT, Ans, Ans0, Ans00, Ans1, Ans2, Ans3, Ans4, Ans5)

... tkinter будет интерпретировать аргументы следующим образом:

  • tk.INSERT - index
  • Ans - текст для вставки
  • Ans0 - один или несколько тегов
  • Ans00 - текст для вставки
  • Ans1 -один или несколько тегов
  • Ans2 - текст для вставки
  • Ans3 - один или несколько тегов
  • Ans4 - текст для вставки
  • Ans5 - один илибольше тегов

Если вы собираетесь вставить несколько строк текста, самое простое решение - объединить их вместе с символами новой строки перед передачей их методу insert:

data = "\n".join((Ans, Ans0, Ans00, Ans1, Ans2, Ans3, Ans4, Ans5))
text1.insert(tk.INSERT, data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...