Example #1
1
def UserInterface(Settingz):

    import wx
    from body import randorator, check_icon, check_windows
# Загружается основной модуль программы и графическая библиотека.
# Program icon existence checking module is loaded.
# Windows platform checking module is loaded.
    from i18n.locator import locale

# WxPython version dependent hacks.
    from wxversion import getInstalled
    try:
        if int(getInstalled()[0][0]) < 3:
            WxPython3 = False
        else:
            WxPython3 = True
    except:
# Strange Windows portable issue.
        WxPython3 = True

    windows = check_windows()
# Here it is a value to check if the program is run under windows.

#===========================|Text_Control_Class|============================#

    class MyTextCtrl:
        def __init__(self, place_frame, place_sizer, string_class, DefaultValue, choise_class = False, button_add = False, DefaultSelection = False):
# Принимается frame прикрепления виджета, sizer упаковки и текст надписи.
# A string value to add a combobox or a button could be also inputed.

            def button_finfo(event):
                wx.MessageBox(button_add, locale(u"ui_iftxt", Settingz["str_langu"]), wx.OK | wx.ICON_INFORMATION)
# Here it is a function to show information window.

            if choise_class or button_add:
                x_box = 45
            else:
                x_box = 0
            x_text = 150 - x_box
# The text widget width will be modified if a combobox or a button is enabled.

            self.sizer_class = wx.BoxSizer(wx.HORIZONTAL)
            place_sizer.Add(self.sizer_class)
# Создаётся упаковщик с горизонтальным порядком заполнения и добавляется в переданный упаковщик.
            self.text_class = wx.StaticText(place_frame, label = string_class, size = (x_text, -1))
            if choise_class:
                self.box_class = wx.Choice(place_frame, size = (x_box, -1), choices = choise_class)
            elif button_add:
                self.button_class = wx.Button(place_frame, label = u"?", size = (x_box, -1))
# The combobox widget or the button will be created if it is set.

            self.control_class = wx.TextCtrl(place_frame, size = (90, -1))
            self.control_class.SetValue(DefaultValue)
# Описание значения и поле ввода.
            self.sizer_class.Add(self.text_class, flag = wx.ALIGN_CENTER_VERTICAL)
            if choise_class:
                self.sizer_class.Add(self.box_class)
                self.box_class.SetSelection(DefaultSelection)
            elif button_add:
                self.sizer_class.Add(self.button_class)
                place_frame.Bind(wx.EVT_BUTTON, button_finfo, self.button_class)
# The combobox widget or the button will be shown if it is set.

            self.sizer_class.Add(self.control_class)
# Описание (с выравниванием по вертикали) и поле упаковываются в соответствующий упаковщик.
        def GetValue(self):
            return(self.control_class.GetValue())
# Метод передаётся от чекбокса объекту описываемого класса.
        def GetCurrentSelection(self):
            if self.box_class.GetCurrentSelection() == 1:
                return(True)
            else:
                return(False)
# Here it is a method to get user decision from a combobox as a logical value.

#=============================|Check_Box_Class|=============================#

    class MyCheckBox:
        def __init__(self, place_frame, place_sizer, string_class, logical_class):
# Принимается frame прикрепления, sizer упаковки, текст надписи и маркер отметки.
            self.check_class = wx.CheckBox(place_frame, label = string_class)
            place_sizer.Add(self.check_class)
# Создаётся и добавляется в переданный упаковщик чекбокс.
            if logical_class:
                self.check_class.SetValue(logical_class)
# Если задано, чекбокс отмечается.
        def IsChecked(self):
            return(self.check_class.IsChecked())
# Метод передаётся от чекбокса объекту описываемого класса.

#==============================|Button_Class|===============================#

    class MyButton:
        def __init__(self, place_frame, place_sizer, string_class, command_class):
# Принимается frame прикрепления виджета, sizer упаковки, строковое значение для надписи и функция.
            self.button_class = wx.Button(place_frame, label = string_class, size = (240, -1))
            place_sizer.Add(self.button_class)
            place_frame.Bind(wx.EVT_BUTTON, command_class, self.button_class)
# Создаётся и добавляется в переданный упаковщик кнопка. Присваевается функция для выполнения.

#========================|Generate_Button_Function|=========================#

    def button_fmake(event):
# Функция для кнопки генерации. Записывается с аргументом события.
        dict_val = {
        "str_langu": Settingz["str_langu"],
        "str_minim": sizer_mini.GetValue(),
        "str_maxim": sizer_maxi.GetValue(),
        "str_quant": sizer_n.GetValue(),
        "str_avera": sizer_mean.GetValue(),
        "str_rsd_p": sizer_rsd.GetValue(),
        "str_round": sizer_round.GetValue(),
        "log_punct": check_punctu.IsChecked(),
        "log_verbo": check_verbosity.IsChecked(),
        "log_algor": check_algorithm.IsChecked(),
        "log_min_v": sizer_mini.GetCurrentSelection(),
        "log_max_v": sizer_maxi.GetCurrentSelection(),
        "log_rsd_a": check_rsd_a.IsChecked(),
        "log_rsd_w": sizer_rsd.GetCurrentSelection(),
        "log_horiz": check_horizontal_output.IsChecked(),
        "str_sortm": sizer_sortm.GetValue()}
# Here it is a dictionary with almost all output values.
        dict_out = randorator(dict_val)
# The output dictionary is transfered to the external function to get text back.
        text_out.SetValue(dict_out["str_infoz"] + dict_out["str_numbz"])
# Запись текста в поле.
        if check_copy.IsChecked():
            if wx.TheClipboard.Open():
                wx.TheClipboard.SetData(wx.TextDataObject(dict_out["str_numbz"]))
                wx.TheClipboard.Close()
# Если задано, открывается, заполняется и закрывается буфер обмена.

#=============================|Program_Window|==============================#

    app_root = wx.App(0)
# Инициация тулкита. Zero to disable output window creating under windows.

    FrameStyle = wx.MINIMIZE_BOX | wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX
    frame_root = wx.Frame(parent = None, style = FrameStyle)
# Создаётся окно: его можно сворачивать, есть системное меню и кнопка закрытия.
    if Settingz["log_ontop"]:
        frame_root.SetWindowStyleFlag(FrameStyle | wx.STAY_ON_TOP)
# Window always on top behavior if configured.
    frame_root.SetTitle(locale(u"ui_title", Settingz["str_langu"]))
# Задаётся заголовок окна.
    window_icon = check_icon("ico")
    if window_icon != "":
        frame_root.SetIcon(wx.Icon(window_icon, type = wx.BITMAP_TYPE_ICO))
# Window icon is loaded.

    panel_root = wx.Panel(frame_root, style = wx.TAB_TRAVERSAL)
# На корневой фрейм добавляется корневая панель,
# чтобы можно было переключаться между элементами по нажатию кнопки Tab.
# Применяется соответствующий стиль, хотя работает и без него.
    if not WxPython3:
        panel_root.SetBackgroundColour(wx.NullColor)
# Окно заливается цветом по умолчанию для корректной отрисовки под windows.

    sizer_root = wx.BoxSizer(wx.VERTICAL)
    panel_root.SetSizer(sizer_root, deleteOld=True)
# Создаётся упаковщик с вертикальным порядком заполнения и применяется к окну.

#==================================|Title|==================================#

    text_title = wx.StaticText(panel_root, style = wx.ALIGN_CENTER | wx.EXPAND)
# Текстовый виджет c выравниванием по центру, растянут по ширине.
    text_title.SetLabel(locale(u"ui_about", Settingz["str_langu"]))
# Задаётся текст виджета.

    sizer_root.Add(text_title, flag = wx.ALIGN_CENTER)
# Текстовый виджет добавляется в корневой упаковщик.

#=============================|Text_Data_Input|=============================#

    sizer_mini = MyTextCtrl(panel_root, sizer_root, locale(u"ui_minim", Settingz["str_langu"]), Settingz["str_minim"], ["", "+"], False, Settingz["log_min_v"])

    sizer_maxi = MyTextCtrl(panel_root, sizer_root, locale(u"ui_maxim", Settingz["str_langu"]), Settingz["str_maxim"], ["", "+"], False, Settingz["log_max_v"])

    sizer_n = MyTextCtrl(panel_root, sizer_root, locale(u"ui_quant", Settingz["str_langu"]), Settingz["str_quant"])

    sizer_mean = MyTextCtrl(panel_root, sizer_root, locale(u"ui_avera", Settingz["str_langu"]),  Settingz["str_avera"])

    sizer_rsd = MyTextCtrl(panel_root, sizer_root, locale(u"ui_rsd_p", Settingz["str_langu"]), Settingz["str_rsd_p"], ["<", "~"], False, Settingz["log_rsd_w"])

    sizer_round = MyTextCtrl(panel_root, sizer_root, locale(u"ui_round", Settingz["str_langu"]), Settingz["str_round"], False, locale(u"ui_ifrnd", Settingz["str_langu"]))

    sizer_sortm = MyTextCtrl(panel_root, sizer_root, locale(u"ui_sortm", Settingz["str_langu"]), Settingz["str_sortm"], False, locale(u"ui_ifsrt", Settingz["str_langu"]))
# Рисуются упаковщики с описаниями значений и полями ввода.

#=================================|Buttons|=================================#

    sizer_buttonz = wx.BoxSizer(wx.HORIZONTAL)
    sizer_root.Add(sizer_buttonz)
# Создаётся упаковщик для кнопок и добавляется в корневой упаковщик.

    button_make = MyButton(panel_root, sizer_buttonz, locale(u"ui_gen_b", Settingz["str_langu"]), button_fmake)
# Кнопка запуска генерирования.

#===============================|Check_Boxes|===============================#

    check_copy = MyCheckBox(panel_root, sizer_root, locale(u"ui_clipb", Settingz["str_langu"]), Settingz["log_clipb"])
# Чекбокс для включения/выключения автоматического копирования значений.
# Активен — копировать.

    check_punctu = MyCheckBox(panel_root, sizer_root, locale(u"ui_punct", Settingz["str_langu"]), Settingz["log_punct"])
# Чекбокс для переключения между точками и запятыми. Неактивен – запятые.
    check_verbosity = MyCheckBox(panel_root, sizer_root, locale(u"ui_error", Settingz["str_langu"]), Settingz["log_verbo"])
# Чекбокс для включения/выключения вывода сообщений об ошибках.
# Активен – выводить.
    if ((not WxPython3) and windows):
        check_algorithm = MyCheckBox(panel_root, sizer_root, locale(u"ui_true1", Settingz["str_langu"]), Settingz["log_algor"])
    else:
        check_algorithm = MyCheckBox(panel_root, sizer_root, locale(u"ui_truer", Settingz["str_langu"]), Settingz["log_algor"])
# Here it is a checkbox to enable true random numbers generation.
# randomdotorg is licenced under GPLv3 and/or any later. The creator is
# Clovis Fabricio. See more at http://code.google.com/p/randomdotorg/
# wx.CheckBox under windows doesn't suppoth the newline symbol:
# see more at http://trac.wxwidgets.org/ticket/9495
    check_rsd_a = MyCheckBox(panel_root, sizer_root, locale(u"ui_rsd_a", Settingz["str_langu"]), Settingz["log_rsd_a"])
# Here it is a checkbox to configure true RSD value output.
# It isn't activated by default and RSD isn't outputed.
    check_horizontal_output = MyCheckBox(panel_root, sizer_root, locale(u"ui_horiz", Settingz["str_langu"]), Settingz["log_horiz"])
# Horizontal (default&True) / vertical numbers output checkbox.

#============================|Text_Data_Output|=============================#

    text_out = wx.TextCtrl(panel_root, style = wx.EXPAND | wx.TE_MULTILINE, size = (-1, 150))
# Текстовый виджет c выравниванием по центру, растянут по ширине.
    sizer_root.Add(text_out, flag = wx.EXPAND)
# Текстовый виджет добавляется в корневой упаковщик.

#=============================|Program_Window|==============================#

    window_size = panel_root.GetBestSize()
    if ((not WxPython3) and windows):
        window_size[0] += ((235 - 230) + 1)
        window_size[1] += ((400 - 377) + 1)
# Size should be enlaged to fix wx/windows bug.
    frame_root.SetSize(window_size)
# Окно подбирает оптимальный размер, для размещения всех виджетов.
    frame_root.Show()
# Показать окно.
    app_root.MainLoop()
Example #2
0
    def wrapError(ErrorID, Language, ErrorzList):
        '''Prints error text and transfers it into UI.'''
        ErrorText = locale(ErrorID, Language)
        print(ErrorText)
        if ErrorID.startswith(u"core_error"):
# Let's not show information messages at UI.
            ErrorzList.append(ErrorText)
        return(ErrorzList)
Example #3
0
 def my_input(LocaleID, DefaultValue):
     if DefaultValue ==  u"":
         print(locale(LocaleID, Settingz["str_langu"]))
         if version < '3':
             OutputValue = raw_input()
         else:
             OutputValue = input()
     else:
         OutputValue = DefaultValue
     return(OutputValue)
Example #4
0
    def checkStateSet(self):
        return(self.CheckBox.checkStateSet())

#=============================|Program_Window|==============================#

app = QtGui.QApplication(argv)

WidgetRoot = QtGui.QWidget()
WidgetRoot.setWindowTitle('Randorator')
WidgetRoot.setWindowIcon(QtGui.QIcon(check_icon("gif")))

LayoutRoot = QtGui.QVBoxLayout()

#==================================|Title|==================================#

TextTitle = QtGui.QLabel(locale(u"ui_about", "en"), WidgetRoot)
TextTitle.setAlignment(QtCore.Qt.AlignCenter)
LayoutRoot.addWidget(TextTitle)

#=============================|Text_Data_Input|=============================#

MyLineEditMini  = MyLineEdit(WidgetRoot, LayoutRoot, locale(u"ui_minim", "en"), ["", "+"])
MyLineEditMaxi  = MyLineEdit(WidgetRoot, LayoutRoot, locale(u"ui_maxim", "en"), ["", "+"])
MyLineEditN     = MyLineEdit(WidgetRoot, LayoutRoot, locale(u"ui_quant", "en"))
MyLineEditMean  = MyLineEdit(WidgetRoot, LayoutRoot, locale(u"ui_avera", "en"))
MyLineEditRsd   = MyLineEdit(WidgetRoot, LayoutRoot, locale(u"ui_rsd_p", "en"), ["<", "~"])
MyLineEditRound = MyLineEdit(WidgetRoot, LayoutRoot, locale(u"ui_round", "en"), False, locale(u"ui_ifrnd", "en"))
MyLineEditSortm = MyLineEdit(WidgetRoot, LayoutRoot, locale(u"ui_sortm", "en"), False, locale(u"ui_ifsrt", "en"))

#=================================|Buttons|=================================#
Example #5
0
    "str_quant": "",
    "str_avera": "",
    "str_rsd_p": "",
    "str_round": "",
    "log_punct": False,
    "log_verbo": False,
    "log_algor": False,
    "log_min_v": False,
    "log_max_v": False,
    "log_rsd_a": True,
    "log_rsd_w": False,
    "log_horiz": False,
    "str_sortm": ""}
# Here it is a blank dictionary with almost all output values.
        
    print(locale(u"ui_about", Settingz["str_langu"]) + u"\n")
    print u"Please press Enter after option typed, blank values are allowed.\n"

    dict_val["str_minim"] = my_input(u"ui_minim", Settingz["str_minim"])
    dict_val["str_maxim"] = my_input(u"ui_maxim", Settingz["str_maxim"])
    dict_val["str_quant"] = my_input(u"ui_quant", Settingz["str_quant"])
    dict_val["str_avera"] = my_input(u"ui_avera", Settingz["str_avera"])
    dict_val["str_rsd_p"] = my_input(u"ui_rsd_p", Settingz["str_rsd_p"])
    dict_val["str_round"] = my_input(u"ui_round", Settingz["str_round"])
    dict_val["str_sortm"] = my_input(u"ui_sortm", Settingz["str_round"])
# Импорт параметров.

    dict_val["log_punct"] = Settingz["log_punct"]
    dict_val["log_algor"] = Settingz["log_algor"]
    dict_val["log_min_v"] = Settingz["log_min_v"]
    dict_val["log_max_v"] = Settingz["log_max_v"]
Example #6
0
 def button_finfo(event):
     wx.MessageBox(button_add, locale(u"ui_iftxt", Settingz["str_langu"]), wx.OK | wx.ICON_INFORMATION)
Example #7
0
 def button_finfo():
     messagebox.showinfo(locale(u"ui_iftxt", Settingz["str_langu"]), button_add)
Example #8
0
def UserInterface(Settingz):

    if version < '3':
        from ScrolledText import ScrolledText
    else:
        from tkinter.scrolledtext import ScrolledText
#Загружается графическая библиотека и модуль, содержащий текстовый виджет с полосой прокрутки.

    from body import randorator, check_icon, check_windows
# Program kernel module is loaded.
# Program icon existence checking module is loaded.
# Windows platform checking module is loaded.

    def button_fmake():
#Функция для кнопки. Записывается без аргументов!
        text_out.delete(1.0, END)
#Очистка текстового поля.
        dict_val = {
        "str_langu": Settingz["str_langu"],
        "str_minim": entry_mini.get(),
        "str_maxim": entry_maxi.get(),
        "str_quant": entry_n.get(),
        "str_avera": entry_mean.get(),
        "str_rsd_p": entry_rsd.get(),
        "str_round": entry_round.get(),
        "log_punct": vcheck_punctuation.get(),
        "log_verbo": vcheck_verbosity.get(),
        "log_algor": vcheck_algorithm.get(),
        "log_min_v": entry_mini.getbox(),
        "log_max_v": entry_maxi.getbox(),
        "log_rsd_a": vcheck_rsd_a.get(),
        "log_rsd_w": entry_rsd.getbox(),
        "log_horiz": vcheck_horizontal_output.get(),
        "str_sortm": entry_sortm.get()}
# Here it is a dictionary with almost all output values.
        dict_out = randorator(dict_val)
# The output dictionary is transfered to the external function to get text back.
        text_out.insert(END, dict_out["str_infoz"] + dict_out["str_numbz"])
# The text is put into the field.
        if vcheck_copy.get():
            root.clipboard_clear()
            root.clipboard_append(dict_out["str_numbz"])
#Если не указано иное, очищается буфер обмена, копируются полученные значения.

    windows = check_windows()
# Here it is a value to check if the program is run under windows.

    if windows:
        if version < '3':
            from ttk import Button, Entry
        else:
            from tkinter.ttk import Button, Entry
# Let tkinter GUI at windows be less ugly. It doesn't look natively at Linux.

    root=Tk()
#Создаётся окно приложения.
    root.title(locale(u"ui_title", Settingz["str_langu"]))
#Задаётся заголовок.
    root.resizable(False, False)
#Нельзя изменять размер окна.
    root.call('wm', 'iconphoto', root._w, PhotoImage(file = check_icon("gif")))
# Window icon is loaded.
    if Settingz["log_ontop"]:
        root.attributes("-topmost", True)
# Window always on top behavior if configured.

    label_title = Label(root, text = locale(u"ui_about", Settingz["str_langu"]))
    label_title.pack()
#Надпись с описанием программы.

    entry_mini = MyEntry(root, locale(u"ui_minim", Settingz["str_langu"]), Settingz["str_minim"], ["", "+"])

    entry_maxi = MyEntry(root, locale(u"ui_maxim", Settingz["str_langu"]), Settingz["str_maxim"], ["", "+"])

    entry_n = MyEntry(root, locale(u"ui_quant", Settingz["str_langu"]), Settingz["str_quant"])

    entry_mean = MyEntry(root, locale(u"ui_avera", Settingz["str_langu"]),  Settingz["str_avera"])

    entry_rsd = MyEntry(root, locale(u"ui_rsd_p", Settingz["str_langu"]), Settingz["str_rsd_p"], ["<", "~"])

    entry_round = MyEntry(root, locale(u"ui_round", Settingz["str_langu"]), Settingz["str_round"], False, locale(u"ui_ifrnd", Settingz["str_langu"]))

    entry_sortm = MyEntry(root, locale(u"ui_sortm", Settingz["str_langu"]), Settingz["str_sortm"], False, locale(u"ui_ifsrt", Settingz["str_langu"]))
#Создаётся необходимое количество объектов класса элементов ввода.

    frame_buttonz = Frame(root)
    frame_buttonz.pack(side = TOP, fill = BOTH)
#Рамка для кнопок. 
    button_make = MyButton(frame_buttonz, locale(u"ui_gen_b", Settingz["str_langu"]), button_fmake)
#Кнопка генерирования.

    vcheck_copy = MyVCheck(root, locale(u"ui_clipb", Settingz["str_langu"]), Settingz["log_clipb"])
#Чекбокс для включения/выключения автоматического копирования значений.
#Активен – копировать.
    vcheck_punctuation = MyVCheck(root, locale(u"ui_punct", Settingz["str_langu"]), Settingz["log_punct"])
#Чекбокс для переключения между точками и запятыми. Неактивен – запятые.
    vcheck_verbosity = MyVCheck(root, locale(u"ui_error", Settingz["str_langu"]), Settingz["log_verbo"])
#Чекбокс для включения/выключения вывода сообщений об ошибках.
#Активен – выводить.
    vcheck_algorithm = MyVCheck(root, locale(u"ui_truer", Settingz["str_langu"]), Settingz["log_algor"])
# Here it is a checkbox to enable true random numbers generation.
# randomdotorg is licenced under GPLv3 and/or any later. The creator is
# Clovis Fabricio. See more at http://code.google.com/p/randomdotorg/
    vcheck_rsd_a = MyVCheck(root, locale(u"ui_rsd_a", Settingz["str_langu"]), Settingz["log_rsd_a"])
# Here it is a checkbox to configure true RSD value output.
# It isn't activated by default and RSD isn't outputed.
    vcheck_horizontal_output = MyVCheck(root, locale(u"ui_horiz", Settingz["str_langu"]), Settingz["log_horiz"])
# Horizontal (default&True) / vertical numbers output checkbox.

    text_out = ScrolledText(root, height = 9, width = 9)
    text_out.pack(side = BOTTOM, fill = BOTH)
#Текстовый виджет с полосой прокрутки растянут по ширине окна приложения.

    root.mainloop()