Кнопки Tkinter Dynami c: как организовать класс для работы глобальных переменных? - PullRequest
0 голосов
/ 28 апреля 2020

Я создаю окно в TKinter, которое позволяет вам выбрать файл Excel, а затем отображает кнопку для каждого листа в файле Excel. Нажав кнопку с именем листа, вы выбираете этот лист для извлечения в текстовый файл. Это также позволяет вам вводить с и длину таблицы, которую вы хотите извлечь из листа, таким образом, я могу поместить эту информацию в функцию, которая извлечет таблицу из выбранного листа Excel и упорядочит ее определенным образом в тексте. документ.

Всплывающее окно, позволяющее выбрать файл:

window

Обновление окна с именем файла и именами листов после выбора файл Excel:

window with excel sheet names and entry boxes

Затем выберите лист, который вы хотите использовать, и введите число ширины и число длины в поля.

Мне нужно было создать кнопку динамика c после выбора документа Excel, который работает. Но ввод ширины и длины таблицы не работает, и когда я go запускаю извлечение, он говорит, что эти переменные не определены. Я не уверен, почему при запуске .get () не берется число, указанное в поле ввода.

Я пытаюсь понять, как организовать это в класс, как это делают все остальные, потому что, похоже, это помогает с глобальными переменными. Я новичок в Python и Tkinter, так что это иностранный. Но так ли это решит проблему невозможности получить текущую запись в полях ввода?

Примечание: здесь показан не весь код извлечения текста, так как у меня уже есть эта работа. Для работы достаточно листа и размера стола.

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

import os
from openpyxl import load_workbook

from tkinter import *            #for pop-up window file searching
from tkinter import filedialog   #for pop-up window file searching

root = Tk()                                                     #root widgtet, always first. "The window"
root.title('Extract Data From Excel File')      #root window title

###     excel_file_button   ##############################################################
###    function for a button to open a file window and locate desired excel file   #######
def open():
    global my_file
    global wb_og
    global sheets


    root.filename = filedialog.askopenfilename(initialdir="/RawData", title="Select Data", filetypes=(("Excel Workbook Files","*.xlsx"),("all files", "*.*")))     #always put raw data in RawData folder for ease of access

    #load in workbook and extract sheet names######
    my_file = (root.filename)
    wb_og = load_workbook(my_file)
    sheets = wb_og.sheetnames

    file_name = os.path.basename(my_file)
    my_label = Label(root, text=file_name).grid(row=1, columnspan=3, sticky='ew')


    # Buttons appears after file is loaded
    for i in range(0, len(sheets)):
        s = sheets[i]
        sheet_button=Button(root, text="%s" % sheets[i], command=lambda s=s: sheet_select(s))
        sheet_button.grid(row=int(((i+(i%3))/3)+1) + 1, column=(i % 3), sticky='ew')
        #root.update()

    #Input fields for phage and strain number tested
    w_e = Entry(root, borderwidth=5, width=15)
    l_e = Entry(root, borderwidth=5, width=15)

    w_e.grid(row =(len(sheets)+2), column=0)
    l_e.grid(row =(len(sheets)+2), column=2)

    w_e.insert(0, "insert width")
    l_e.insert(0, "insert length")


    #Button to take prevoius inputs and extract data to text file
    creation_button = Button(root, text='Create Text File', command=extract_to_txt)
    creation_button.grid(row=(len(sheets)+3), columnspan=3)



###     select worksheet button     ######################################################
def sheet_select(sheet_name):
    global choosen_sheet
    #sheet_label = Label(root, text=sheet_name).pack()
    choosen_sheet = sheet_name
    print(choosen_sheet)

##########################################################################################
###     extract data to text file button     #############################################
##########################################################################################

def extract_to_txt():

    wid = w_e.get()  #create integer variable from entry
    leng = l_e.get() #create integer variable from entry

    xlsx = pd.read_excel(my_file, choosen_sheet)

    #removed extra rows without data
    host_range_xlsx = xlsx.iloc[0:wid, :]
    host_range_xlsx.fillna(0) #fill all nan values with 0

    hr_all = pd.DataFrame(host_range_xlsx)
    hr = hr_all.iloc[:,0:leng]

    print(hr)



###     Button for Excel File       ######################################################
excel_file_button = Button(root, text="Open File", command=open).grid(row=0, column=0, columnspan=3, sticky='ew', pady=10)   #col span 3 so everyworks in a grid system 3 wide

root.mainloop()
...