source: framspy/gui/widgets/importWindow.py @ 1316

Last change on this file since 1316 was 1198, checked in by Maciej Komosinski, 22 months ago

Added simple Python GUI for Framsticks library/server

File size: 2.6 KB
Line 
1import tkinter as tk
2import tkinter.ttk as ttk
3from tkinter import simpledialog
4from typing import Tuple
5from framsfiles import reader
6from collections import Counter
7
8class ImportWindow(simpledialog._QueryDialog):
9    def __init__(self, *args, **kw):
10        if "filename" in kw:
11            self.__filename = kw["filename"]
12            del kw["filename"]
13        else:
14            self.__filename = None
15
16        self.vec = [tk.IntVar(), tk.IntVar(), tk.IntVar(), tk.IntVar(), tk.IntVar(), tk.IntVar()]
17
18        simpledialog._QueryDialog.__init__(self, "Select import options for '{}'".format(self.__filename.split("/")[-1]), "options", *args, **kw)
19
20    def body(self, master):
21        objectCounters = self.__countOccurrences(self.__filename)
22
23        text = "Import genotypes - {} genotypes found".format(objectCounters[0])
24        cb = ttk.Checkbutton(master, text=text, variable=self.vec[0], state="enabled" if objectCounters[0] > 0 else "disabled")
25        cb.pack(anchor=tk.W)
26
27        text = "Import simulator parameters without changing expdef - {} parameter sets found".format(objectCounters[1])
28        cb = ttk.Checkbutton(master, text=text, variable=self.vec[1], state="enabled" if objectCounters[1] > 0 else "disabled")
29        cb.pack(anchor=tk.W)
30
31        text = "Import genepool settings - {} gene pools found".format(objectCounters[2])
32        cb = ttk.Checkbutton(master, text=text, variable=self.vec[2], state="enabled" if objectCounters[2] > 0 else "disabled")
33        cb.pack(anchor=tk.W)
34
35        text = "Import population settings - {} populations found".format(objectCounters[3])
36        cb = ttk.Checkbutton(master, text=text, variable=self.vec[3], state="enabled" if objectCounters[3] > 0 else "disabled")
37        cb.pack(anchor=tk.W)
38
39        cb = ttk.Checkbutton(master, text="Create new groups for imported genepools and populations", variable=self.vec[4])
40        tk.Label(master, text="").pack(anchor=tk.W)
41
42        cb.pack(anchor=tk.W)
43
44        cb = ttk.Checkbutton(master, text="Allow switching to a different expdef while importing simulator parameters", variable=self.vec[5])
45        cb.pack(anchor=tk.W)
46       
47        return cb
48
49    def getresult(self):
50        options = 0
51        for i, v in enumerate(self.vec):
52            options += v.get() * (2 ** (i + 1))
53        return options
54
55    def __countOccurrences(self, filename) -> Tuple[int, int, int, int]:
56        objects = ["org", "sim_params", "GenePool", "Population"]
57
58        file = reader.load(filename)
59        counts = Counter(p["_classname"] for p in file)
60        result = [counts[o] for o in objects]
61
62        return tuple(result)
Note: See TracBrowser for help on using the repository browser.