import os
import sys
import configparser
import PIL.Image as image
import tkinter as tk
import logging # DEBUG INFO WARNING ERROR
from logging.handlers import QueueHandler
logger_win_load_seq = logging.getLogger('win_load_seq')
logger_win_load_seq.addHandler(logging.StreamHandler())
logger_win_load_seq.info("logging from win_seq_puls start up")
class Puls:
def __init__(self, P1="10", TP1="20", TE1="30", TA="40"): # **kwargs
self.puls_1 = P1
self.pulspause_1 = TP1
self.echo_1 = TE1
self.acquire = TA
self.nr_puls = 1
print("\n duration of 1st puls ", P1)
print("\n duration of 1st puls pause ", TP1)
print("\n duration of 1st Echo ", TE1)
print("\n ___ \n time of Acquire ", TA)
def add_puls(P, TP, TE):
print("add puls to sequence")
### save new experiment ###
[docs]def save_file(path, experiment="test_experiment_1", data="test_data_11"):
"""chech if folderstrukture for saving exist otherwise generate filestrukture
:param path: main storage path
:type path: str
:param experiment: sub folder path, defaults to "test_experiment_1"
:type experiment: str, optional
:param data: subsubfolder path, defaults to "test_data_11"
:type data: str, optional
:return: check if sucsessfull
:rtype: str
"""
data = path+"/"+experiment+"/"+data
try:
# os.mkdir(experiment)
os.makedirs(data)
except OSError as error:
print("error file1 Experiment olready exists")
logger_win_load_seq.error('error message')
return "testing save"
# read and save input vales from GUI and save it to config.cfg file
[docs]def save_values(path="test_data", experiment="test_experiment", data="test_data"):
"""save files to folderstructure
:param path: main folder to save to, defaults to "test_data"
:type path: str, optional
:param experiment: subfolder to save to, defaults to "test_experiment"
:type experiment: str, optional
:param data: subsub folder to save to, defaults to "test_data"
:type data: str, optional
"""
cfg_section = "puls_sequenz"
input_values = {}
print("save to cfg_section: " + cfg_section)
input_values["P_1"] = globals()["P_1_input"].get()
input_values["TP_1"] = globals()["TP_1_input"].get()
input_values["TA"] = globals()["TA_input"].get()
path_lable.config(text="Seq. for data: "+path)
experiment_lable.config(text="Seq. for experiment: "+experiment)
data_lable.config(text="Seq. for data: "+data)
logger_win_load_seq.info('load inputs from save_valsues ')
print("loadet all in save_values", input_values)
# read and write to config.cfg
config = configparser.ConfigParser()
# generate files
save_file(path, experiment, data)
config["filepath"] = {"path": path,
"experiment": experiment, "data": data}
# save sequence file
data = path+"/"+experiment+"/"+"config.cfg"
try:
with open(data, "r") as configfile:
print("####### ___"+data)
# config.read("config.cfg")
print("_____________________ TEST pre ______________________")
print("available of file_path ___ ",
config.has_option(cfg_section, "file_path"))
print("available of puls_sequence ___ ",
config.has_option(cfg_section, "puls_sequence"))
print("types of sections avalibel ____ ", config.sections())
# print("types of options avalibel of option ___ ", config.has_option(cfg_section, "file_path"))
print("_____________________ TEST after ______________________")
if config.has_section(cfg_section): # config.has_option(section, option)
print(".cfg section exist ", data)
config[cfg_section] = input_values
logger_win_load_seq.info('Values were saved and overwritten')
else:
print(".cfg section dose not exist")
config.add_section(cfg_section)
config[cfg_section] = input_values
logger_win_load_seq.info('Values were saved and new written')
except IOError:
print("generated new .cfg file ", data)
config[cfg_section] = input_values
logger_win_load_seq.info('Values were saved and written to a new file')
with open(data, "w") as configfile:
print("## save .cfg to __", data)
config.write(configfile)
logger_win_load_seq.info('save_values end ')
### loading data from past experiments ####
[docs]class win_load_file(tk.Tk):
"""generate Window for Filehandeling
:param tk: import tkinter module
:type tk: tkinter
"""
def __init__(self, path="test_sample", experiment="test_experiment", data="test_data", *args, **kwargs):
"""initialisation of file handeling strukture window. additional also the posibilit to add comments to the experiment
:param path: main path, defaults to "test_sample"
:type path: str, optional
:param experiment: subfolder path, defaults to "test_experiment"
:type experiment: str, optional
:param data: subsubfolder path, defaults to "test_data"
:type data: str, optional
"""
tk.Tk.__init__(self, *args, **kwargs)
######----- contant ------######
frame_boarder = 4
self.path = path
self.experiment = experiment
self.data = data
text_log = "class window _main calling filestructure"
text_log = text_log + "path " + path + "\n"
text_log = text_log + "experiment " + experiment + "\n"
text_log = text_log + "data " + data + "\n"
logger_win_load_seq.info(text_log)
print("def win_load_seq from win_load_seq.py\n" + log_text)
import tkinter as tk
# import tkinter.ttk as TTK #use for Combobox
######----- Setup of gui ------######
window_experiment = tk.Tk()
window_experiment.title("set new experiment")
window_experiment.wm_iconbitmap(bitmap=log_path)
# Fensterbreite,hoehe, on secreen offset x, on screen offset y
window_experiment.geometry("1000x750")
window_experiment.option_add(
"Helvetica", '10') # Frischart und groesse
window_experiment.resizable(
width=False, height=False) # False = no resize
self.frame_path_view = tk.Frame(self, bg='grey')
self.frame_measure.grid(row=0, column=0, padx=frame_boarder,
pady=frame_boarder, sticky="nsew")
self.strukture_title = tk.Label(
frame_path_view, text="Set Experiment Structure ")
self.strukture_title.grid(
row=0, column=0, columnspan=2, padx=5, pady=5)
self.strukture_sampel = tk.Label(
frame_path_view, text="Sample: \n Example: Puls shaping")
self.strukture_sampel.grid(row=1, column=0, padx=5, pady=5)
self.strukture_experiment = tk.Label(
frame_path_view, text="Experiment: \n Example: Bismut ")
self.strukture_experiment.grid(row=1, column=0, padx=5, pady=5)
self.strukture_data = tk.Label(
frame_path_view, text="Data: \n Example: FID,Echo ")
self.strukture_data .grid(row=1, column=0, padx=5, pady=5)
self.frame_path_set = tk.LabelFrame(
self, text="storage path", bg='grey')
self.frame_measure.grid(row=1, column=0, padx=frame_boarder,
pady=frame_boarder, sticky="nsew")
self.sampel_label = tk.Label(
self.frame_path, text="Sample: \n Example: Puls shaping")
self.sampel_label.grid(row=1, column=0, padx=5, pady=5)
self.experiment_label = tk.Label(
self.frame_path, text="Experiment: \n Example: Bismut ")
self.experiment_label.grid(row=1, column=0, padx=5, pady=5)
self.frame_path_set = tk.Label(
self.frame_path, text="Data: \n Example: FID,Echo ")
self.frame_path_set.grid(row=1, column=0, padx=5, pady=5)
lable_text = tk.Label(window_experiment, text="Set Experiment structure ",
foreground="green", background="OliveDrab4", font=("Helvetica", 30))
lable_text.place(x=50, y=10, width=500, height=50)
# Set parameters
text_input_height = 40
path_text = "Seq. for data: "+path
path_lable = tk.Label(
window_experiment, text=path_text, background="gray50")
path_lable.place(x=50, y=100, width=500, height=text_input_height)
experiment_text = "Seq. for experiment: "+experiment
experiment_lable = tk.Label(
window_experiment, text=experiment_text, background="gray50")
experiment_lable.place(x=50, y=150, width=500,
height=text_input_height)
data_text = "Seq. for data: "+data
data_lable = tk.Label(
window_experiment, text=data_text, background="gray50")
data_lable.place(x=50, y=200, width=500, height=text_input_height)
# Experiment
gray_light = "gray70"
path_lable_input = tk.Label(
window_experiment, text="Set Seq. data: ", background=gray_light)
path_lable_input.place(x=50, y=300, width=300, height=40)
data = tk.Entry(window_experiment, fg="black", bg="white", width=40)
data.place(x=350, y=300, width=200, height=40)
experiment_lable_input = tk.Label(
window_experiment, text="Set Seq. experiment: ", background=gray_light)
experiment_lable_input.place(x=50, y=350, width=300, height=40)
experiment = tk.Entry(
window_experiment, fg="black", bg="white", width=40)
experiment.place(x=350, y=350, width=200, height=40)
data_lable_input = tk.Label(
window_experiment, text="Set Seq. data: ", background=gray_light)
data_lable_input.place(x=50, y=400, width=300, height=40)
data = tk.Entry(window_experiment, fg="black", bg="white", width=40)
data.place(x=350, y=400, width=200, height=40)
# Buttons
save_button = tk.Button(window_experiment, text="Save",
background="SkyBlue4", command=lambda: save_experiment())
save_button.place(x=50, y=450, width=140, height=50)
save_button = tk.Button(window_experiment, text="load",
command=lambda: print("butten load"))
save_button.place(x=230, y=450, width=140, height=50)
close_button = tk.Button(window_experiment, text="Close",
background="tomato4", command=window_experiment.destroy)
close_button.place(x=410, y=450, width=140, height=50)
def save_experiment():
"""initialising the storage of the set parameters
"""
self.button_last_run.grid(row=7, column=0,
padx=5, pady=5, sticky="ew")
print("save all parameters to .cfg file")
status_lable = tk.Label(
window_experiment, text="updated sequence !!")
status_lable.place(x=10, y=250, width=500,
height=text_input_height)
# global experiment = {}
experiment_dict["data"] = data.get()
experiment_dict["experiment"] = experiment.get()
experiment_dict["data"] = data.get()
print(experiment_dict)
path_lable.config(text="Seq. for data: "+experiment_dict["data"])
experiment_lable.config(
text="Seq. for experiment: "+experiment_dict["experiment"])
data_lable.config(text="Seq. for data: "+experiment_dict["data"])
save_values(
experiment_dict["data"], experiment_dict["experiment"], experiment_dict["data"])
print("end of save_experiment")
# colour http://www.science.smith.edu/dftwiki/images/thumb/3/3d/TkInterColorCharts.png/700px-TkInterColorCharts.png
if __name__ == "__main__":
# for testing
print("-_____start import puls_win")
import os
import configparser
import PIL.Image as image
import logging # DEBUG INFO WARNING ERROR
from logging.handlers import QueueHandler
# logger = logging.basicConfig(filename="logging.log", level=logging.DEBUG, # <- set logging level
# format="%(asctime)s:%(levelname)s:%(message)s" ) # set level
logger_win_load_seq = logging.getLogger(__name__)
logger_win_load_seq.setLevel(logging.DEBUG) # <- set logging level
log_handler = logging.FileHandler("log_file.log")
formatter = logging.Formatter("%(asctime)s:%(levelname)s:%(message)s")
log_handler.setFormatter(formatter)
logger_win_load_seq.addHandler(log_handler)
logger_win_load_seq.info("set upp logger in puls_win.py")
import function
print("-_____start puls_win")
path = os.getcwd()
print("The current working directory is %s" % path)
print("__testrun_save_1__")
win = windows_file(
path="test_data", experiment="test_experiment_3", data="test_data_3")
print("start")
# win.mainloop()
a, b, *c = (1, 2, 3, 4, 5)
print("__ end pre_file.py__")