Как распечатать данные файла на основе состояния флажков с помощью 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
Большое спасибо