when I wont to inser (anyting I print) to the textbox it will not inser
it just print then hanging

# a look at the Tkinter Text widget

# use ctrl+c to copy, ctrl+x to cut selected text,

# ctrl+v to paste, and ctrl+/ to select all
  # count words in a text and show the first ten items
# by decreasing frequency

import Tkinter as tk
import os, glob
import sys
import string
import re
import tkFileDialog      
def most_frequant_word():    
browser= tkFileDialog.askdirectory()
#browser= os.listdir(a)


for root, dirs, files in os.walk(browser):
    print 'Looking into %s' % root.split('\\')[-1]
    print 'Found %d dirs and %d files' % (len(dirs), len(files))
    #text1.insert(tk.INSERT,'Looking into %s' % root.split('\\')[-1])
    #text1.insert(tk.INSERT, 'Found %d dirs and %d files' % (len(dirs), len(files)))
    for idx, file in enumerate(files):
     print 'File #%d: %s' % (idx + 1, file)
      #text1.insert(tk.INSERT, 'File #%d: %s' % (idx + 1, file))
     ff = open (os.path.join(root, file), "r")
     text = ff.read ( )
     ff.close ( )
     word_freq = {}
     
     word_list = text.strip().split()
     
     for word in word_list:
      word = word.lower().rstrip('.,/"-_;\\[]()')

      if word.isalpha():
                # build the dictionary
       count = word_freq.get(word, 0)
       word_freq[word] = count + 1

       # create a list of (freq, word) tuples
       freq_list = [(freq, word) for word, freq in word_freq.items()]
     
       # sort the list by the first element in each tuple (default)
       freq_list.sort(reverse=True)
    
     for n, tup in enumerate(freq_list):
    # print the first ten items
      if n < 50:
        print "%s times: %s" % tup
        text1.insert(tk.INSERT, freq)
        text1.insert(tk.INSERT, word)
        text1.insert(tk.INSERT, "\n")
        
raw_input('\nHit enter to exit')

root = tk.Tk(className = " most_frequant_word")
# text entry field, width=width chars, height=lines text
v1 = tk.StringVar()
text1 = tk.Text(root, width=50, height=20, bg='green')
text1.pack()
# function listed in command will be executed on button click
button1 = tk.Button(root, text='Brows', command=most_frequant_word)
button1.pack(pady=5)
text1.focus()
root.mainloop()

code try to insert to the textbox

print "%s times: %s" % tup
        text1.insert(tk.INSERT, freq)
        text1.insert(tk.INSERT, word)
        text1.insert(tk.INSERT, "\n")

when I wont to insert file name and directory to the textbox it will hang also
code is comment

print 'Looking into %s' % root.split('\\')[-1]
    print 'Found %d dirs and %d files' % (len(dirs), len(files))
    #text1.insert(tk.INSERT,'Looking into %s' % root.split('\\')[-1])
    #text1.insert(tk.INSERT, 'Found %d dirs and %d files' % (len(dirs), len(files)))
    for idx, file in enumerate(files):
     print 'File #%d: %s' % (idx + 1, file)
      #text1.insert(tk.INSERT, 'File #%d: %s' % (idx + 1, file))

Dani AI

Generated

A short diagnosis and practical fix for (and a follow-up to 's debug tip).

The apparent "hang" is caused by doing long, blocking work inside the button callback (walking directories, reading files, then waiting on input). The Tk mainloop never regains control, so the window becomes unresponsive. There is also an undefined-name bug in the insert calls (variables like freq/word must actually exist and be strings), and any use of raw_input inside a GUI callback will block the whole app.

Simple checks (as suggested): confirm a minimal script that creates a Text widget and does a single insert works. Remove any raw_input/blocking calls and run the program from a console to see Python tracebacks (NameError, etc.). Ensure values passed to text.insert are strings (use str() for numbers). For many inserts, build a single string and insert once (faster) instead of inserting in a tight loop.

A robust pattern is to run heavy work in a background thread and send text updates to the main thread via a Queue; only the main thread should touch Tk widgets. The main thread polls the queue with root.after and inserts lines into the Text widget. Minimal pattern (Python 2 style):

import Tkinter as tk
import threading, Queue, os

def worker(q, path):
    for root, dirs, files in os.walk(path):
        q.put('Looking into %s' % root)
        for fn in files:
            q.put('File: %s' % fn)
    q.put(None)  # sentinel

def poll(q):
    try:
        while True:
            item = q.get_nowait()
            if item is None:
                return
            text1.insert('end', item + '\n')
    except Queue.Empty:
        pass
    root.after(100, poll, q)

This keeps the GUI responsive and avoids thread-safety bugs. Additional tips: batch inserts when possible, avoid calling root.update() as the main solution, and handle exceptions from the worker so the queue gets a sentinel even on error.

I'm surprised that it hangs rather than giving an error message. Your code references text1 before text1 is ever defined.

I recommend this procedure for debugging:

First, write a small program that simply creates a text widget and writes something to it.

Then, transfer what you've learned back to this program.

Jeff

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.