В записной книжке Jupyter я использую tkinter для сбора пользовательского ввода, чтобы другой код мог генерировать выходной файл. Я создал кнопку отправки для хранения переменных, но я должен закрыть окно tkinter, прежде чем остальная часть кода сможет использовать их и запустить для вывода.
Я хотел бы иметь возможность выполнить весь путь до выходного файла, а затем ввести новые входы без закрытия и перезапуска. Как я могу держать окно tkinter открытым все время?
from tkinter import *
import datetime
from datetime import timedelta
from dateutil.relativedelta import relativedelta
import pandas as pd
class MyWindow:
def __init__(self, win):
self.lbl=Label(win, text="Tool")
self.lbl1=Label(win, text='ndays')
self.lbl2=Label(win, text='Date 1')
self.t1=Entry()
self.t2=Entry()
self.lbl.place(x=150, y=10)
self.lbl1.place(x=50, y=50)
self.t1.place(x=150, y=50)
self.lbl2.place(x=50, y=90)
self.t2.place(x=150, y=90)
self.b1=Button(win, text='Submit', command=self.submit)
self.b2=Button(win, text='Refresh')
self.b2.bind('<Button-1>', self.refresh)
self.b1.place(x=150, y=260)
self.b2.place(x=270, y=260)
def submit(self):
global ndays, screen
ndays=self.t1.get()
screen=self.t2.get()
#in case of refresh
def refresh(self, event):
self.t1.delete(0, 'end')
self.t2.delete(0, 'end')
window=Tk()
mywin=MyWindow(window)
window.title("Tool")
window.geometry("400x400+10+10")
window.mainloop()
Я не могу получить доступ к переменным имени и даты на экране без выхода из окна tkinter. Я хотел бы иметь возможность переопределить sh переменных и снова запустить их для вывода без необходимости закрывать окно.
Код ниже - это следующие шаги, которые я буду выполнять для создания пользовательского календарь.
screen = datetime.datetime.strptime(screen, '%m/%d/%y').date()
# find the of the number of days backwards.
ndays=int(ndays)
thirty_back = screen + relativedelta(days=-ndays - 1)
delta1 = screen - thirty_back
# Empty lists to loop into
date_list = [] # dates
day_counter_thing = []
day_o_week = [] # real day of week
counter = [] # list for the days used
day_count = -1 # starts at -1 so that screen day can be 0
for i in range(delta1.days):
day = screen - timedelta(days=i) # know where to start the tlfb
date_list.append(day) # list of dates in the loop
day_count = day_count + 1 # add a count for each day in the loop
counter.append(day_count) # keep a list of all the day counts
day_o_week.append(day.strftime("%A")) # add the real day of the week
name = day.weekday() # name of day by index of day in week
day_counter_thing.append(name) # keep the list
max_day = max(counter) # gives you reference so that you can swap the counter after screen
# put the values from the loops into a dataframe
df = pd.DataFrame({'Date': date_list, "Day": day_o_week, "Counter": day_counter_thing, "TLFB_Day": counter})