Home > Back-end >  Tkinter Python - In the output display box, I am getting the summarized text , but I don't want
Tkinter Python - In the output display box, I am getting the summarized text , but I don't want

Time:06-17

In the output display box, I am getting the summarized text, but I don't want the numbers displayed here.

This is the code

summary()  # calling summary function
# print(sentenceSummary)
print('\n')
final_text = sorted(sentenceSummary.items())
for x in final_text:
    print(x[1])
tab1_display.insert(tk.END, final_text)

I want to store the result of the for loop in a variable and pass it to tab1_display.insert(tk.END, .....) as the 2nd argument How can I modify the code?

Elaborate explanation of the problem: sentenceSummary is a dictionary.

{10: 'बिना शिक्षा के जीवन लक्ष्य रहित और कठिन हो जाता है', 20: 'देश में हर क्षेत्र में नागरिकों के लिए अच्छी और उचित शिक्षा प्रणाली को उपलब्ध कराए जाने के सामान्य लक्ष्य को निर्धारित किया जाना चाहिए और शिक्षा प्राप्ति के रास्ते को सुगम व सुलभ्य बनाए जाने की कोशिश की जानी चाहिए', 19: ' इस प्रकार एक देश का व्यापक विकास उस में देश में नागरिकों के लिए उपलब्ध प्रचलित शिक्षा प्रणाली पर निर्भर करता है', 11: 'इसलिए हमें शिक्षा के महत्व और दैनिक जीवन में इसकी आवश्यकता को समझना चाहिए', 4: 'शिक्षा सभी के जीवन को सकारात्मक तरीके से प्रभावित करती है और हमें जीवन की सभी छोटी और बड़ी समस्याओं का समाना करना सिखाती है', 3: 'शिक्षा के महत्व को ध्यान में रखते हुए सरकार के द्वारा साल से साल तक की आयु वाले सभी बच्चों के लिए शिक्षा को अनिवार्य कर दिया गया है', 17: 'इस प्रकार हमें सभी के लिए अच्छी शिक्षा प्रणाली को प्राप्त करने के समान अवसर देने की कोशिश करनी चाहिए चाहे वो गरीब हो या अमीर', 13: 'विकलांग और गरीब व्यक्तियों को भी अमीर और सामान्य व्यक्तियों की तरह वैश्विक विकास प्राप्त करने के लिए शिक्षा की समान आवश्यकता है और उन्हें समान अधिकार भी प्राप्त है', 1: 'शिक्षा सबसे महत्वपूर्ण तंत्र है जो व्यक्ति के जीवन के साथ ही देश के विकास में भी महत्वपूर्ण भूमिका निभाती है', 5: 'समाज में सभी के लिए शिक्षा की ओर इतने बड़े स्तर पर जागरुक करने के बाद भी देश के विभिन्न क्षेत्रों में शिक्षा का प्रतिशत अभी भी समान है', 16: ' कुछ लोग शिक्षित होते हैं लेकिन पिछड़े इलाकों में उचित शिक्षा प्रणाली के अभाव के कारण अपने दैनिक कार्यों के लिए धन जोड़ने में भी पर्याप्त कुशल नहीं होते'}

here key --> int and value ---> string hence in the above code i have sorted it using sorted(sentenceSummary.items()). and now I just want the values to be displayed in the tab1_display (which is a ScrolledText box )

the for loop does the job

for x in final_text:
        print(x[1])

the print statement here prints the texts in order line by line

िक्षा सबसे महत्वपूर्ण तंत्र है जो व्यक्ति के जीवन के साथ ही देश के विकास में भी महत्वपूर्ण भूमिका निभाती है शिक्षा के महत्व को ध्यान में रखते हुए सरकार के द्वारा साल से साल तक की आयु वाले सभी बच्चों के लिए शिक्षा को अनिवार्य कर दिया गया है शिक्षा सभी के जीवन को सकारात्मक तरीके से प्रभावित करती है और हमें जीवन की सभी छोटी और बड़ी समस्याओं का समाना करना सिखाती है समाज में सभी के लिए शिक्षा की ओर इतने बड़े स्तर पर जागरुक करने के बाद भी देश के विभिन्न क्षेत्रों में शिक्षा का प्रतिशत अभी भी समान है बिना शिक्षा के जीवन लक्ष्य रहित और कठिन हो जाता है इसलिए हमें शिक्षा के महत्व और दैनिक जीवन में इसकी आवश्यकता को समझना चाहिए विकलांग और गरीब व्यक्तियों को भी अमीर और सामान्य व्यक्तियों की तरह वैश्विक विकास प्राप्त करने के लिए शिक्षा की समान आवश्यकता है और उन्हें समान अधिकार भी प्राप्त है कुछ लोग शिक्षित होते हैं लेकिन पिछड़े इलाकों में उचित शिक्षा प्रणाली के अभाव के कारण अपने दैनिक कार्यों के लिए धन जोड़ने में भी पर्याप्त कुशल नहीं होते इस प्रकार हमें सभी के लिए अच्छी शिक्षा प्रणाली को प्राप्त करने के समान अवसर देने की कोशिश करनी चाहिए चाहे वो गरीब हो या अमीर इस प्रकार एक देश का व्यापक विकास उस में देश में नागरिकों के लिए उपलब्ध प्रचलित शिक्षा प्रणाली पर निर्भर करता है देश में हर क्षेत्र में नागरिकों के लिए अच्छी और उचित शिक्षा प्रणाली को उपलब्ध कराए जाने के सामान्य लक्ष्य को निर्धारित किया जाना चाहिए और शिक्षा प्राप्ति के रास्ते को सुगम व सुलभ्य बनाए जाने की कोशिश की जानी चाहिए

but the thing is, I want to store the result in a variable so that I can pass it to this code snippet here instead of final_text

tab1_display.insert(tk.END, final_text)

CodePudding user response:

Try this:

import os

final_text = os.linesep.join(
    [v for k, v in sorted(sentenceSummary.items())]
)

Let's unpack that. Suppose:

In [1]: sentenceSummary = {1: "foo", 3: "bar", 2: "spam"};

Sorting the output of items() will give you a list of tuples.

In [2]: sorted(sentenceSummary.items())
Out[2]: [(1, 'foo'), (2, 'spam'), (3, 'bar')]

Only the text is required, so select that.

In [3]: [v for k, v in sorted(sentenceSummary.items())]
Out[3]: ['foo', 'spam', 'bar']

Convert it into a single string to append to the text widget:

In [4]: import os

In [6]: os.linesep.join([v for k, v in sorted(sentenceSummary.items())])
Out[6]: 'foo\nspam\nbar'

(Note that the value of os.linesep depends on the platform.)

CodePudding user response:

If I understand correctly, we have a dictionary with sentences that first need to be sorted and then need to be passed to a tkinter.Text() widget (here: tab1_display).

Let's assume we have a dictionary like this:

sentenceSummary = {2:'It\'s me again!',1:'Hello world.'}

First, create a list of sorted keys. Then store the corresponding values in the dictionary in a list. Finally, join the list elements and assign to the widget.

sorted_keys = sorted(sentenceSummary) # [1, 2]
sorted_values = [sentenceSummary[x] for x in sorted_keys] # ['Hello world.', "It's me again!"]

# =============================================================================
# also possible:
# from operator import itemgetter
# sorted_values = itemgetter(*sorted_keys)(sentenceSummary)
# =============================================================================

final_text = " ".join(sorted_values) # "Hello world. It's me again!" 
# or "\n".join(sorted_values) if you want line breaks

tab1_display.insert(tk.END, final_text)
  • Related