Vasudha Dixit Ответов: 0

Как распечатать данные файла на основе состояния флажков с помощью tkinter?


Я пытаюсь создать что-то похожее на поиск Google. Я создал динамические флажки на основе результата поиска из виджета ввода и пытаюсь распечатать содержимое выбранного флажка на текстовом виджете. Но все содержимое файла результата поиска печатается полностью при нажатии клавиши enter в поле ввода. И ничего не происходит при нажатии на любой из флажков.

Выход :- проблема с данными файла — Postimage.org[^]

Пакетный откат(файл 1) содержимое -->

pyt_batch_id :- pyt_batch_id

Here multilines of 
sql statements
the main pyt_batch_id
task is to 
replace pyt_batch_id
from its second 
pyt_batch_id occurence


Содержимое пакета отката Tiaflex batch rollback(file2) -->

pyt_batch_id :- pyt_batch_id 
pyt_ply_no :- pyt_ply_no 
pyt_clm_no :- pyt_clm_no 
----------------END OF INPUTS---------------
The provided batch ids are (pyt_batch_id)

The provided ply numbers are (pyt_ply_no)

The provided clm numbers are (pyt_clm_no)

(pyt_batch_id) are in process.
(pyt_batch_id) completed.

(pyt_ply_no) are in process.
(pyt_ply_no) completed.

(pyt_clm_no) are in process.
(pyt_clm_no) completed.



В заявлении
chk = Checkbutton(search_result, text = sheet.row_values(result[0])[1],variable = sheet.row_values(result[0])[0], onvalue = 1,  offvalue = 0, command = show(sheet.row_values(result[0])[2]))
, этот
command = show(sheet.row_values(result[0])[2])
должен выполняться только тогда, когда флажок установлен, но он выполняется в момент создания флажка

Короче говоря, я пытаюсь распечатать содержимое файла только тогда, когда флажок установлен, но он отображается в момент создания флажка. Пожалуйста, помогите мне с этим.

Что я уже пробовал:

from tkinter import *
import shutil
import os
from datetime import datetime
import xlrd
from os import listdir
from os.path import isfile, join
import pyperclip

check_box_list = [] #variable to hold check box results


def show(file_path):
    with open(file_path, 'r') as f:
       file_data.insert(INSERT, f.read())

def search_datafix(search_string_parm):
    path = "DATAFIX_LIST.xlsx"
    search_string = search_string_parm
    open_file(path, search_string)


def open_file(path, search_string):
    wb = xlrd.open_workbook(path)
    sheet = wb.sheet_by_index(0)

    search_string_list = search_string.split()

    results = [] # holding row_num and keyword match frequency
    for row_num in range(sheet.nrows):

        row_value = sheet.row_values(row_num)

        keyword_match = 0 
        for keyword in search_string_list:
            if keyword.lower() in row_value[1].lower():
                # increasing keyword match frequency if it matches with a record
                keyword_match += 1

        # appending a list containing row_num and no of keywords matched to our
        # list if atleast one keyword is matched
        if keyword_match:
            results.append([row_num, keyword_match])    

    # sorting our results list in descending order of keyword match count
    results.sort(key = lambda results: results[1], reverse=True)

    # printing rows of our "DATAFIX_LIST.xlsx" file on basis of first index 
    # (row num) of all the rows stored
    i = 0
    checkbox_dict = dict()
    for result in results:
        #------------------------------------Dynamic checkbox creation----------------------------------------------#
        sheet.row_values(result[0])[0] = IntVar()
        chk = Checkbutton(search_result, text = sheet.row_values(result[0])[1],variable = sheet.row_values(result[0])[0], onvalue = 1,  offvalue = 0, command = show(sheet.row_values(result[0])[2]))
        chk.grid(row = i, column = 0)
        check_box_list.append(chk) #adding current check boxes list
        i = i+1


def search_handle_focus_in(_):
    search_box.delete(0, END)
    search_box.config(fg='black')

def search_handle_focus_out(_):
    search_box.delete(0, END)
    search_box.config(fg='grey')
    search_box.insert(0, "Example: Batch Rollback")

def search_handle_enter(txt):
    for i in check_box_list: #Deleting previous search result
         i.destroy()

    search_datafix(search_box.get())


window = Tk() #Window Creation

#Window Decoration
window.title("Datafix Generator")
window.geometry('1300x660')
window.resizable(0,0)

#Menu Icons
menu_frame = Frame(window, width = 400, height = 100)
menu_frame.grid(row = 0, column = 0)

search_icon = Button(menu_frame, text = 'Search Datafix', borderwidth = 0, relief=RAISED)
search_img = PhotoImage(file ='search_datafix_7.png')
search_icon.config(image=search_img)
search_icon.grid(row = 0, column = 0, padx = (100,20))



#Main Frames
main_search_frame = LabelFrame(window, text = 'Main Search Frame', width=200, height=100)
main_search_frame.grid(row = 1, column = 0, pady = 10)

#Search Field
search_frame = LabelFrame(main_search_frame, text = 'Search Bar Frame', width=200, height=100)
search_frame.grid(row = 0, column = 0, pady = 10)

search_box = Entry(search_frame, bd = 5, bg='white', width=100, fg='grey')
search_box.grid(row = 0, column = 0, columnspan=2)

search_box.insert(0, "Example: Batch Rollback")

search_box.bind("<FocusIn>", search_handle_focus_in)
search_box.bind("<FocusOut>", search_handle_focus_out)
search_box.bind("<Return>", search_handle_enter)



#Search Results
search_result = LabelFrame(main_search_frame, text = 'Search Results Frame', width = 400, height = 400)
search_result.grid(row = 1, column = 0, pady = 10)

#File Display Result
file_content_frame = LabelFrame(main_search_frame, text = 'File Content Frame', width = 400, height = 400)
file_content_frame.grid(row = 1, column = 1, padx = 10, pady = 10)

#File Data Field
file_data = Text(file_content_frame)
file_data. grid(row = 0, column = 0)


window.mainloop()

Richard MacCutchan

Вам нужно предоставить более подробную информацию о том, какой флажок используется вашим процессом печати (который я не могу найти в приведенном выше коде).

Vasudha Dixit

Здесь флажок создается динамически с помощью переменной "chk", и печать должна происходить только тогда, когда флажок установлен. Но в моем случае файл печатается во время процесса поиска(т. е. при нажатии enter на виджете ввода)

Richard MacCutchan

Извините, но если вы не покажете реальный код и не объясните, где возникает проблема, мы не сможем предложить вам никаких предложений.

Vasudha Dixit

В операторе "chk = Checkbutton(search_result, text = sheet.row_values(result[0])[1],variable = sheet.row_values(result[0])[0], onvalue = 1, offvalue = 0, command = show(sheet.row_values(result[0])[2]))", команда " command = show(sheet.row_values(result[0])[2])" должна выполняться только при установке флажка, но она выполняется в момент создания флажка.

Я обновил содержание своего вопроса. Пожалуйста, вернитесь, если проблема все еще не ясна.

Richard MacCutchan

Я могу только предположить, что команда вызывается при первом создании кнопки по какой-то причине. Я думаю, вам нужно будет выполнить несколько базовых тестов, чтобы точно увидеть, как реализуются эти виджеты. Вы можете попробовать другую команду, которая просто проверяет состояние checkbutton.

Vasudha Dixit

Большое спасибо

0 Ответов