'Exploring Normalizations' : ExploringNormalizations, 'Different Scales' : DifferentScales,
            'Pyplot Box Plot' : PyplotBoxPlot, 'Pyplot ggplot Style Sheet' : PyplotGGPlotSytleSheet,
            'Pyplot Line Poly Collection' : PyplotLinePolyCollection, 'Pyplot Line Styles' : PyplotLineStyles,
            'Pyplot Scatter With Legend' :PyplotScatterWithLegend, 'Artist Customized Box Plots' : PyplotArtistBoxPlots,
            'Artist Customized Box Plots 2' : ArtistBoxplot2, 'Pyplot Histogram' : PyplotHistogram}


sg.ChangeLookAndFeel('LightGreen')
figure_w, figure_h = 650, 650
# define the form layout
listbox_values = [key for key in fig_dict.keys()]
col_listbox = [[sg.Listbox(values=listbox_values, change_submits=True, size=(28, len(listbox_values)), key='func')],
               [sg.T(' ' * 12), sg.Exit(size=(5, 2))]]

layout = [[sg.Text('Matplotlib Plot Test', font=('current 18'))],
          [sg.Column(col_listbox, pad=(5, (3, 330))), sg.Canvas(size=(figure_w, figure_h), key='canvas') ,
           sg.Multiline(size=(70, 35), pad=(5, (3, 90)), key='multiline')],]

# create the form and show it without the plot
window = sg.Window('Demo Application - Embedding Matplotlib In PySimpleGUI', grab_anywhere=False).Layout(layout)
window.Finalize()

canvas_elem = window.FindElement('canvas')
multiline_elem= window.FindElement('multiline')

while True:
    event, values = window.Read()
    print(event)
    # show it all again and get buttons
    if event in (None, 'Exit'):
        break
예제 #2
0
        dac1 = int(dummydac1 / 255.0 * 4095)
        dac2 = int(dummydac2 / 255.0 * 4095)
        v = f'4 {dac1} {ms} {dac2} {ms}'
        #print(v)
        try:
            window.write_event_value('-THREAD-', v)
        except:
            pass
        time.sleep(0.1)


fig = plt.figure(figsize=(6, 4))
figure_x, figure_y, figure_w, figure_h = fig.bbox.bounds
ax = fig.add_subplot(111)

layout = [[sg.Canvas(size=(figure_w, figure_h), key='-CANVAS-')],
          [sg.Text('IPアドレス'),
           sg.InputText(size=(15, 1), key='-IPADDRESS-')],
          [sg.Button('OPEN'),
           sg.Text('未接続', size=(10, 1), key='-STATUS-')],
          [
              sg.Text('DAC1'),
              sg.Slider(range=(0, 255),
                        orientation='h',
                        size=(34, 20),
                        default_value=0,
                        key='-DAC1-',
                        enable_events=True)
          ],
          [
              sg.Text('DAC2'),
    'Pyplot Histogram': PyplotHistogram
}

sg.change_look_and_feel('LightGreen')
figure_w, figure_h = 650, 650
# define the form layout
listbox_values = list(fig_dict)
col_listbox = [[
    sg.Listbox(values=listbox_values,
               change_submits=True,
               size=(28, len(listbox_values)),
               key='-LISTBOX-')
], [sg.Text(' ' * 12), sg.Exit(size=(5, 2))]]

col_multiline = sg.Col([[sg.MLine(size=(70, 35), key='-MULTILINE-')]])
col_canvas = sg.Col([[sg.Canvas(size=(figure_w, figure_h), key='-CANVAS-')]])
col_instructions = sg.Col([
    [sg.Pane([col_canvas, col_multiline], size=(800, 600))],
    [
        sg.Text(
            'Grab square above and slide upwards to view source code for graph'
        )
    ]
])

layout = [
    [sg.Text('Matplotlib Plot Test', font=('ANY 18'))],
    [sg.Col(col_listbox), col_instructions],
]

# create the form and show it without the plot
예제 #4
0
fig_agg_1 = fig_agg_2 = fig_agg_3 = None  # 画像のヒストグラムを表示する用の変数
Image_height = 240  # 画面上に表示する画像の高さ
Image_width = 320  # 画面上に表示する画像の幅

# ------------------------- #
# デバイス(GPU)側メモリの確保
# ------------------------- #
img_gpu_src = cv2.cuda.GpuMat()
img_gpu_dst_1 = cv2.cuda.GpuMat()
img_gpu_dst_2 = cv2.cuda.GpuMat()
img_gpu_dst_3 = cv2.cuda.GpuMat()

window = sg.Window('Demo Application - OpenCV Integration', [
    [
        sg.Image(filename='', key='image'),
        sg.Canvas(size=(Image_width, Image_height), key='-CANVAS_1-')
    ],
    [
        sg.Image(filename='', key='image_2'),
        sg.Canvas(size=(Image_width, Image_height), key='-CANVAS_2-')
    ],
    [
        sg.Image(filename='', key='image_3'),
        sg.Canvas(size=(Image_width, Image_height), key='-CANVAS_3-')
    ],
],
                   location=(800, 400))
cap = cv2.VideoCapture(0)  # Setup the camera as a capture device
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240)
while True:  # The PSG "Event Loop"
예제 #5
0
def main():

    ###### GUI LOGIC ######
    iterations=100 #needed to init progress bar
    #define window layout
    sg.LOOK_AND_FEEL_TABLE['Reddit']['BORDER'] = 0
    sg.change_look_and_feel('Reddit')

    btn_layout = [
                [sg.Button('Run'),sg.Button('Preview Sofa', key='preview'), \
                    sg.Button('Stop')],
                ]

    col = [
            [sg.Text('Please enter the following values',size=(30,3), \
                font=('Helvetica',12), justification='center')],
            [sg.Text('Number of Anchor Points', size=(30,2)), \
                sg.InputCombo(values=(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, \
                    17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35, \
                    36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55, \
                    56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75, \
                    76,77,78,79,80,81,82,83,84,85,86,87,88,89,91,92,93,94,95,96, \
                    97,98,99,100,128,256,512,\
                    1024), key='N', size=(8,10),tooltip='whole number input')],
            [sg.Text('Number of Iterations', size=(30,2)), sg.InputText( \
                key='iterations',size=(10,2),tooltip='whole number input')],
            [sg.Text('Show Hallway Outlines', size=(30,2)), sg.OptionMenu( \
                values = ('True', 'False'), key='outline',size=(10,2))],
            [sg.Text('Smooth Sofa Object', size=(30,2)), sg.OptionMenu( \
                values=('True','False'),key='smooth',default_value='False', \
                size=(10,2))],
            [sg.Text('Hallway placement (height)', size=(30,1)), sg.Slider( \
                range=(0,5), orientation='h', size=(10,10), default_value=5,\
                key='b-param')],
            [sg.Text('Hallway placement (width)', size=(30,1)), sg.Slider( \
                range=(0,2), orientation='h', size=(10,10), default_value=2,\
                key='a-param')],
            [sg.Frame('',btn_layout,border_width=0,pad=((50,0),(50,0)))],
            [sg.ProgressBar(iterations,orientation='h',pad=((65,0),(10,0)), \
                size=(20,20),key='progressbar')]
          ]

    layout = [
                [sg.Canvas(key='-CANVAS-'),sg.VerticalSeparator( \
                    pad=((0,30),(43,43))),sg.Column(col),]
            ]

    #plotting logic so initial grid displays
    plt.style.use('ggplot')
    fig = Figure()
    ax=fig.add_subplot(111)

    #define window layout
    window = sg.Window('Moving Sofa Balancer',layout,finalize=True) # window
    canvas_elem = window.FindElement('-CANVAS-') #identify canvas elem
    canvas = canvas_elem.TKCanvas #place in TK
    fig_agg = draw_figure(canvas,fig)
    progress_bar = window['progressbar']

    while True:
        #lets user preview sofas until run is pressed
        while True:
            ax.cla()
            events, values = window.read() #read arg vals into vars
            #----read arguments 

            # Provide a way out when user closes program
            if events in ('Exit', None):
                window.close()
                exit(-1)

            try:
                test_var1 = int(values['N'])
                test_var2 = int(values['iterations'])
            except:
                sg.Popup('One or more inputs of incorrect type.',
                              title='Type Err', line_width=30)
                continue

            N = int(values['N']) + 1
            if N <= 8:
                tol = 1/50
            if 18 > N > 8:
                tol = 1/150
            if 30 > N > 18:
                tol = 1/500
            if 60 > N > 30:
                tol= 1/1000
            if N > 60:
                tol = 1/5000
            if N > 120:
                tol = 1/50000

            iterations = int(values['iterations'])
            wireframe = bool(values['outline'] == 'True')
            smooth = bool(values['smooth'] == 'True')
            a_param = int(values['a-param'])/10
            b_param = int(values['b-param'])/10
            #----make hallway objs based on args
            hallway_set = hallway_list(N,a_param,b_param)
            hallway = set_to_poly(hallway_set)
            #init vars and plotting logic
            minx,miny,maxx,maxy = hallway.bounds

            ax.set_xlim([-2.75,1.5])
            ax.set_ylim([-1,2])
            ax.set_aspect(1)

            if smooth:
                carver = get_carver(hallway_set)
                hallway_smth = hallway.difference(carver)
                ax.add_patch(PolygonPatch(hallway_smth,fc='#0087C9',ec='grey'))
                smth_area = hallway_smth.area
                init_area = smth_area
                ax.set_title('Area Change = %.16f, Area = %.16f' %( \
                    smth_area-init_area, smth_area),fontsize=10)

            if not smooth:
                ax.add_patch(PolygonPatch(hallway,fc='#0087C9',ec='grey'))
                new_area = hallway.area
                init_area = hallway.area
                ax.set_title('Area Change = %.16f, Area = %.16f' %( \
                    new_area-init_area, new_area),fontsize=10)

            if wireframe:
                for i in range(1,len(hallway_set)):
                    x,y = hallway_set[i].exterior.xy
                    ax.plot(x,y,linewidth=0.2)

            fig_agg.draw()
            if events in ('Run', None):
                break
            if events in ('Exit', None):
                exit(-1)

        #loop and push
        for i in range(iterations):
            event, values = window.Read(timeout=0.01)
            if event in ('Exit', None):
                window.close()
                exit(-1)
            if event in ('Stop', None):
                break

            progress_bar.UpdateBar(i+1,iterations)

            hallway,hallway_set = try_push(hallway,hallway_set,N,tol,0)

            #if recursion depth is met we terminate
            if type(hallway) is str: #str is sign of recursion depth reached
                exit(1)
                return 1

            #reset canvas to redraw on
            ax.cla()
            plt.cla()

            ax.set_xlim([-2.75,1.5])
            ax.set_ylim([-1,2])
            ax.set_aspect(1)

            x,y = hallway_set[0].exterior.xy
            ax.plot(x,y,color='grey',linewidth=0.5)

            if wireframe:
                for i in range(1,len(hallway_set)):
                    x,y = hallway_set[i].exterior.xy
                    ax.plot(x,y,linewidth=0.2)

            if smooth:
                carver = get_carver(hallway_set)
                hallway_smth = hallway.difference(carver)
                ax.add_patch(PolygonPatch(hallway_smth,fc='#0087C9',ec='grey'))
                smth_area = hallway_smth.area
                ax.set_title('Area Change = %.16f, Area = %.16f' %( \
                    smth_area-init_area, smth_area),fontsize=10)
            if not smooth:
                ax.add_patch(PolygonPatch(hallway,fc='#0087C9',ec='grey'))
                new_area = hallway.area
                ax.set_title('Area Change = %.16f, Area = %.16f' %( \
                    new_area-init_area, new_area),fontsize=10)

            fig_agg.draw()


        #keeps figure open after completion
        plt.cla()
        ax.set_xlim([minx-.5,maxx+.5])
        ax.set_ylim([miny-.25,maxy+.5])
        ax.set_aspect(1)
        #ax.add_patch(PolygonPatch(hallway,fc='#FF5733'))

        if smooth:
            carver = get_carver(hallway_set)
            hallway = hallway.difference(carver)

        if wireframe:
            for i in range(1,len(hallway_set)):
                x,y = hallway_set[i].exterior.xy
                ax.plot(x,y,linewidth=0.2)

        ax.add_patch(PolygonPatch(hallway,fc='#0087C9',ec='grey'))
        ax.set_title('N=%d, Area = %.16f' %(N, hallway.area),fontsize=10)
def delete_figure_agg(figure_agg):
    figure_agg.get_tk_widget().forget()
    plt.close('all')


layout = [
    [
        sg.Input(size=(30, 1)),
        sg.FileBrowse(key='-Image_path-'),
        sg.Radio('カメラ', 'picture', size=(10, 1), key='-WebCam-'),
        sg.Radio('画像', 'picture', default=True, size=(10, 1), key='-Image-'),
    ],
    [
        sg.Image(filename='', size=(Image_width, Image_height), key='rgb'),
        sg.Canvas(size=(Image_width, Image_height), key='rgb_CANV'),
        sg.Image(filename='', size=(Image_width, Image_height), key='glay'),
        sg.Canvas(size=(Image_width, Image_height), key='glay_CANV'),
        sg.Image(filename='', size=(Image_width, Image_height), key='xyz'),
        sg.Canvas(size=(Image_width, Image_height), key='xyz_CANV'),
    ],
    [
        sg.Image(filename='', size=(Image_width, Image_height), key='hsv'),
        sg.Canvas(size=(Image_width, Image_height), key='hsv_CANV'),
        sg.Image(filename='', size=(Image_width, Image_height), key='hls'),
        sg.Canvas(size=(Image_width, Image_height), key='hls_CANV'),
        sg.Image(filename='', size=(Image_width, Image_height), key='YCrCb'),
        sg.Canvas(size=(Image_width, Image_height), key='YCrCb_CANV'),
    ],
    [
        sg.Image(filename='', size=(Image_width, Image_height), key='luv'),
    'Axes Grid': AxesGrid,
    'Exploring Normalizations': ExploringNormalizations,
    'Different Scales': DifferentScales,
    'Pyplot Box Plot': PyplotBoxPlot,
    'Pyplot ggplot Style Sheet': PyplotGGPlotSytleSheet,
    'Pyplot Line Poly Collection': PyplotLinePolyCollection,
    'Pyplot Line Styles': PyplotLineStyles,
    'Pyplot Scatter With Legend': PyplotScatterWithLegend,
    'Artist Customized Box Plots': PyplotArtistBoxPlots,
    'Artist Customized Box Plots 2': ArtistBoxplot2,
    'Pyplot Histogram': PyplotHistogram
}

g.ChangeLookAndFeel('LightGreen')
figure_w, figure_h = 650, 650
canvas_elem = g.Canvas(size=(figure_w,
                             figure_h))  # get the canvas we'll be drawing on
multiline_elem = g.Multiline(size=(70, 35), pad=(5, (3, 90)))
# define the form layout
listbox_values = [key for key in fig_dict.keys()]
col_listbox = [[
    g.Listbox(values=listbox_values,
              change_submits=True,
              size=(28, len(listbox_values)),
              key='func')
], [g.T(' ' * 12), g.Exit(size=(5, 2))]]

layout = [
    [g.Text('Matplotlib Plot Test', font=('current 18'))],
    [g.Column(col_listbox, pad=(5, (3, 330))), canvas_elem, multiline_elem],
]
예제 #8
0
    def analyze_country(self, window, country):
        """
        Creates chosen country spread graph layout and window
        :param window:
        :param country:
        :return:
        """

        sg.ChangeLookAndFeel(self.gui_theme)
        sg.SetOptions(margins=(0, 3), border_width=1)
        loc = window.CurrentLocation()

        menu_elem = sg.Menu(menu, tearoff=False)

        plt.close()

        m = 0

        r = requests.get(COUNTRY + country + '/status/confirmed')

        country_data = r.json()

        for i in range(len(country_data)):

            self.cases.append(
                [country_data[i]['Cases'], country_data[i]['Date']])

        for i in range(len(self.cases)):

            element = self.cases[i]
            self.number.append(element[0])

        plt.plot(self.number, label=country)
        m = max([m, max(self.number)])

        plt.title(f'{country} spread')
        plt.ylabel('Cases')
        plt.xlabel('Days')
        plt.ylim([0, 1.1 * m])
        plt.legend(loc='lower right', fontsize=8)
        plt.grid()

        fig = plt.gcf()

        figure_x, figure_y, figure_w, figure_h = fig.bbox.bounds

        graph_layout = [[menu_elem],
                        [sg.Canvas(size=(figure_w, figure_h), key='-CANVAS-')],
                        [sg.Button('Back')]]

        w = sg.Window('{}'.format(APP_NAME),
                      graph_layout,
                      default_button_element_size=(12, 1),
                      auto_size_buttons=False,
                      location=(loc[0], loc[1]),
                      force_toplevel=True,
                      finalize=True)

        self.draw_figure(w['-CANVAS-'].TKCanvas, fig)

        window.Close()
        self.cases.clear()
        self.number.clear()
        return w
def main():

    NUM_DATAPOINTS = 10000
    # define the form layout
    layout = [[
        sg.Text('Animated Matplotlib',
                size=(40, 1),
                justification='center',
                font='Helvetica 20')
    ], [sg.Canvas(size=(640, 480), key='-CANVAS-')],
              [sg.Text('Progress through the data')],
              [
                  sg.Slider(range=(0, NUM_DATAPOINTS),
                            size=(60, 10),
                            orientation='h',
                            key='-SLIDER-')
              ], [sg.Text('Number of data points to display on screen')],
              [
                  sg.Slider(range=(10, 500),
                            default_value=40,
                            size=(40, 10),
                            orientation='h',
                            key='-SLIDER-DATAPOINTS-')
              ],
              [
                  sg.Button('Exit',
                            size=(10, 1),
                            pad=((280, 0), 3),
                            font='Helvetica 14')
              ]]

    # create the form and show it without the plot
    window = sg.Window(
        'Demo Application - Embedding Matplotlib In PySimpleGUI',
        layout,
        finalize=True)

    canvas_elem = window['-CANVAS-']
    slider_elem = window['-SLIDER-']
    canvas = canvas_elem.TKCanvas

    # draw the initial plot in the window
    fig = Figure()
    ax = fig.add_subplot(111)
    ax.set_xlabel("X axis")
    ax.set_ylabel("Y axis")
    ax.grid()
    fig_agg = draw_figure(canvas, fig)
    # make a bunch of random data points
    dpts = [randint(0, 10) for x in range(NUM_DATAPOINTS)]

    for i in range(len(dpts)):

        event, values = window.read(timeout=10)
        if event in ('Exit', None):
            exit(69)
        slider_elem.update(
            i)  # slider shows "progress" through the data points
        ax.cla()  # clear the subplot
        ax.grid()  # draw the grid
        data_points = int(values['-SLIDER-DATAPOINTS-']
                          )  # draw this many data points (on next line)
        ax.plot(range(data_points), dpts[i:i + data_points], color='purple')
        fig_agg.draw()

    window.close()
def make_window(theme=None):

    NAME_SIZE = 23

    def name(name):
        dots = NAME_SIZE - len(name) - 2
        return sg.Text(name + ' ' + '•' * dots,
                       size=(NAME_SIZE, 1),
                       justification='r',
                       pad=(0, 0),
                       font='Courier 10')

    sg.theme(theme)

    # NOTE that we're using our own LOCAL Menu element
    if use_custom_titlebar:
        Menu = sg.MenubarCustom
    else:
        Menu = sg.Menu

    treedata = sg.TreeData()

    treedata.Insert(
        "",
        '_A_',
        'Tree Item 1',
        [1234],
    )
    treedata.Insert("", '_B_', 'B', [])
    treedata.Insert(
        "_A_",
        '_A1_',
        'Sub Item 1',
        ['can', 'be', 'anything'],
    )

    layout_l = [
        [name('Text'), sg.Text('Text')], [name('Input'),
                                          sg.Input(s=15)],
        [name('Multiline'), sg.Multiline(s=(15, 2))],
        [name('Output'), sg.Output(s=(15, 2))],
        [
            name('Combo'),
            sg.Combo(sg.theme_list(),
                     default_value=sg.theme(),
                     s=(15, 22),
                     enable_events=True,
                     readonly=True,
                     k='-COMBO-')
        ], [name('OptionMenu'),
            sg.OptionMenu([
                'OptionMenu',
            ], s=(15, 2))], [name('Checkbox'),
                             sg.Checkbox('Checkbox')],
        [name('Radio'), sg.Radio('Radio', 1)],
        [name('Spin'), sg.Spin([
            'Spin',
        ], s=(15, 2))], [name('Button'), sg.Button('Button')],
        [
            name('ButtonMenu'),
            sg.ButtonMenu('ButtonMenu', sg.MENU_RIGHT_CLICK_EDITME_EXIT)
        ], [name('Slider'),
            sg.Slider((0, 10), orientation='h', s=(10, 15))],
        [
            name('Listbox'),
            sg.Listbox(['Listbox', 'Listbox 2'], no_scrollbar=True, s=(15, 2))
        ], [name('Image'),
            sg.Image(sg.EMOJI_BASE64_HAPPY_THUMBS_UP)],
        [name('Graph'),
         sg.Graph((125, 50), (0, 0), (125, 50), k='-GRAPH-')]
    ]

    layout_r = [
        [
            name('Canvas'),
            sg.Canvas(background_color=sg.theme_button_color()[1],
                      size=(125, 40))
        ],
        [
            name('ProgressBar'),
            sg.ProgressBar(100, orientation='h', s=(10, 20), k='-PBAR-')
        ],
        [
            name('Table'),
            sg.Table([[1, 2, 3], [4, 5, 6]], ['Col 1', 'Col 2', 'Col 3'],
                     num_rows=2)
        ], [name('Tree'),
            sg.Tree(treedata, [
                'Heading',
            ], num_rows=3)], [name('Horizontal Separator'),
                              sg.HSep()],
        [name('Vertical Separator'), sg.VSep()],
        [name('Frame'), sg.Frame('Frame', [[sg.T(s=15)]])],
        [name('Column'), sg.Column([[sg.T(s=15)]])],
        [
            name('Tab, TabGroup'),
            sg.TabGroup(
                [[sg.Tab('Tab1', [[sg.T(s=(15, 2))]]),
                  sg.Tab('Tab2', [[]])]])
        ],
        [
            name('Pane'),
            sg.Pane([sg.Col([[sg.T('Pane 1')]]),
                     sg.Col([[sg.T('Pane 2')]])])
        ], [name('Push'), sg.Push(),
            sg.T('Pushed over')], [name('VPush'), sg.VPush()],
        [name('Sizer'), sg.Sizer(1, 1)],
        [name('StatusBar'), sg.StatusBar('StatusBar')],
        [name('Sizegrip'), sg.Sizegrip()]
    ]

    # Note - LOCAL Menu element is used (see about for how that's defined)
    layout = [[
        Menu([['File', ['Exit']], ['Edit', [
            'Edit Me',
        ]]],
             k='-CUST MENUBAR-',
             p=0)
    ],
              [
                  sg.T('PySimpleGUI Elements - Use Combo to Change Themes',
                       font='_ 14',
                       justification='c',
                       expand_x=True)
              ],
              [
                  sg.Checkbox('Use Custom Titlebar & Menubar',
                              use_custom_titlebar,
                              enable_events=True,
                              k='-USE CUSTOM TITLEBAR-',
                              p=0)
              ], [sg.Col(layout_l, p=0),
                  sg.Col(layout_r, p=0)]]

    window = sg.Window('The PySimpleGUI Element List',
                       layout,
                       finalize=True,
                       right_click_menu=sg.MENU_RIGHT_CLICK_EDITME_VER_EXIT,
                       keep_on_top=True,
                       use_custom_titlebar=use_custom_titlebar)

    window['-PBAR-'].update(30)  # Show 30% complete on ProgressBar
    window['-GRAPH-'].draw_image(
        data=sg.EMOJI_BASE64_HAPPY_JOY,
        location=(0, 50))  # Draw something in the Graph Element

    return window
예제 #11
0
# ------------------------------- END OF YOUR MATPLOTLIB CODE -------------------------------

# ------------------------------- Beginning of Matplotlib helper code -----------------------


def draw_figure(canvas, figure):
    figure_canvas_agg = FigureCanvasTkAgg(figure, canvas)
    figure_canvas_agg.draw()
    figure_canvas_agg.get_tk_widget().pack(side='top', fill='both', expand=1)
    return figure_canvas_agg


# ------------------------------- Beginning of GUI CODE -------------------------------

# define the window layout
layout = [[sg.Text('Plot test')], [sg.Canvas(key='-CANVAS-')],
          [sg.Button('Ok')]]

# create the form and show it without the plot
window = sg.Window('Demo Application - Embedding Matplotlib In PySimpleGUI',
                   layout,
                   finalize=True,
                   element_justification='center',
                   font='Helvetica 18')

# add the plot to the window
fig_canvas_agg = draw_figure(window['-CANVAS-'].TKCanvas, fig1)

event, values = window.read()

window.close()
def main():
    canvas_elem = sg.Canvas(size=(640,
                                  480))  # get the canvas we'll be drawing on
    # define the form layout
    layout = [[
        sg.Text('Animated Matplotlib',
                size=(40, 1),
                justification='center',
                font='Helvetica 20')
    ], [canvas_elem],
              [
                  sg.ReadFormButton('Exit',
                                    size=(10, 2),
                                    pad=((280, 0), 3),
                                    font='Helvetica 14')
              ]]

    # create the form and show it without the plot
    form = sg.FlexForm(
        'Demo Application - Embedding Matplotlib In PySimpleGUI')
    form.Layout(layout)
    form.Finalize()

    canvas = canvas_elem.TKCanvas

    while True:
        button, values = form.ReadNonBlocking()
        if button is 'Exit' or values is None:
            exit(69)

        def PyplotScatterWithLegend():
            import matplotlib.pyplot as plt
            from numpy.random import rand

            fig, ax = plt.subplots()
            for color in ['red', 'green', 'blue']:
                n = 750
                x, y = rand(2, n)
                scale = 200.0 * rand(n)
                ax.scatter(x,
                           y,
                           c=color,
                           s=scale,
                           label=color,
                           alpha=0.3,
                           edgecolors='none')

            ax.legend()
            ax.grid(True)
            return fig

        fig = PyplotScatterWithLegend()

        figure_x, figure_y, figure_w, figure_h = fig.bbox.bounds
        figure_w, figure_h = int(figure_w), int(figure_h)
        photo = tk.PhotoImage(master=canvas, width=figure_w, height=figure_h)

        canvas.create_image(640 / 2, 480 / 2, image=photo)

        figure_canvas_agg = FigureCanvasAgg(fig)
        figure_canvas_agg.draw()

        # Unfortunately, there's no accessor for the pointer to the native renderer
        tkagg.blit(photo,
                   figure_canvas_agg.get_renderer()._renderer,
                   colormode=2)
예제 #13
0
    "DURATION (s)": 90,
    "MAX POWER": None,
    "TAR 1 TSET": 23.5,
    "TAR 2 TSET": None,
    "CAL STD LEN": 5,
    "AMB TSET": None,
}

settingsDisplay = [[
    sg.Column([[sg.Text(setting, justification='right')]
               for setting in profileSettings.keys()]),
    sg.Column([[sg.Text(str(profileSettings[setting]), justification='left')]
               for setting in profileSettings.keys()])
]]

makeIndicator = lambda key, color=None: sg.Canvas(
    size=(10, 10), background_color=color, key=key)

hwStatusIndicators = [
    makeIndicator('armIndicator', 'red'),
    sg.Text('ARM  '),
    makeIndicator('enremIndicator', 'blue'),
    sg.Text('ENREM  '),
    makeIndicator('flirIndicator', 'yellow'),
    sg.Text('FLIR  '),
]

settingsDisplayColumn = [[
    sg.Column(settingsDisplay),
    sg.Column(mainButtons, key='buttonShelf'),
], hwStatusIndicators]
예제 #14
0
import PySimpleGUI as sg


#This function returns the RGB parameters of sliders to Hex
def rgb_hex(rgb):
    return "%02x%02x%02x" % rgb


sg.theme("Topanga")

layout = [[
    sg.Text(text="HEX: ", font=("Rockwell", 17)),
    sg.Text(text='#000000', key="codeHEX", font=("Rockwell", 17))
], [sg.Canvas(size=(350, 250), key="Canvas", background_color="#000000")],
          [sg.Text("Red", font=("Rockwell", 15))],
          [
              sg.Slider((0, 255),
                        font=("Rockwell", 17),
                        key="sliderRED",
                        orientation="horizontal",
                        enable_events=True,
                        disable_number_display=False)
          ], [sg.Text("Green", font=("Rockwell", 15))],
          [
              sg.Slider((0, 255),
                        font=("Rockwell", 17),
                        key="sliderGREEN",
                        orientation="horizontal",
                        enable_events=True,
                        disable_number_display=False)
          ], [sg.Text("Blue", font=("Rockwell", 15))],
예제 #15
0
def main():
    ###### Gather default data #######
    tether = False
    astpriority = False
    dncpart = False
    settings = build.settings()
    openers = settings[0]
    fights = settings[2]
    openlist = settings[1]
    fightlist = settings[3]
    jobs = build.genjobs()
    party = build.genparty(jobs)
    pbuffs = build.genpbuffs(party, tether, dncpart)
    buffs = build.genbuffs()
    dots = build.gendots()
    dex = 3662
    WD = 114
    det = 1462
    ss = 1283
    crit = 1967 + 1360
    dh = 1806 + 560
    wepdelay = 3.04
    gcd = stats.determinegcd(ss)
    abilities = build.genabil(wepdelay, gcd)

    layout = [
        [sg.Text("BRD Simulator"),
         sg.Text('', size=(20, 1))],
        [
            sg.Text("Sim One Stats"),
            sg.Text(''),
            sg.Text('', size=(22, 1)),
            sg.Text('Sim Two Stats')
        ],
        [
            sg.Text("Weapon Damage", size=(14, 1)),
            sg.Input(default_text=WD,
                     size=(8, 1),
                     key='wd1',
                     do_not_clear=True),
            sg.Text('', size=(12, 1)),
            sg.Text("Weapon Damage", size=(14, 1)),
            sg.Input(default_text='',
                     size=(8, 1),
                     key='wd2',
                     do_not_clear=True)
        ],
        [
            sg.Text("Weapon Delay", size=(14, 1)),
            sg.Input(default_text=wepdelay,
                     size=(8, 1),
                     key='del1',
                     do_not_clear=True),
            sg.Text('', size=(12, 1)),
            sg.Text("Weapon Delay", size=(14, 1)),
            sg.Input(default_text=wepdelay,
                     size=(8, 1),
                     key='del2',
                     do_not_clear=True)
        ],
        [
            sg.Text("Dexterity", size=(14, 1)),
            sg.Input(default_text=dex,
                     size=(8, 1),
                     key='dex1',
                     do_not_clear=True),
            sg.Text('', size=(12, 1)),
            sg.Text("Dexterity", size=(14, 1)),
            sg.Input(size=(8, 1), key='dex2', do_not_clear=True)
        ],
        [
            sg.Text("Critical Hit Rate", size=(14, 1)),
            sg.Input(default_text=crit,
                     size=(8, 1),
                     key='crit1',
                     do_not_clear=True),
            sg.Text('', size=(12, 1), key='crate1'),
            sg.Text("Critical Hit Rate", size=(14, 1)),
            sg.Input(default_text='3347',
                     size=(8, 1),
                     key='crit2',
                     do_not_clear=True),
            sg.Text('', key='crate2', size=(12, 1))
        ],
        [
            sg.Text("Direct Hit", size=(14, 1)),
            sg.Input(default_text=dh,
                     size=(8, 1),
                     key='dh1',
                     do_not_clear=True),
            sg.Text('', size=(12, 1), key='direct1'),
            sg.Text("Direct Hit", size=(14, 1)),
            sg.Input(default_text='2046',
                     size=(8, 1),
                     key='dh2',
                     do_not_clear=True),
            sg.Text('', key='direct2', size=(10, 1))
        ],
        [
            sg.Text("Determination", size=(14, 1)),
            sg.Input(default_text=det,
                     size=(8, 1),
                     key='det1',
                     do_not_clear=True),
            sg.Text('', size=(12, 1), key='deter1'),
            sg.Text("Determination", size=(14, 1)),
            sg.Input(default_text='1462',
                     size=(8, 1),
                     key='det2',
                     do_not_clear=True),
            sg.Text('', key='deter2', size=(10, 1))
        ],
        [
            sg.Text("Skill Speed", size=(14, 1)),
            sg.Input(default_text=ss,
                     size=(8, 1),
                     key='sks1',
                     do_not_clear=True),
            sg.Text('', size=(12, 1), key='skill1'),
            sg.Text("Skill Speed", size=(14, 1)),
            sg.Input(default_text='1283',
                     size=(8, 1),
                     key='sks2',
                     do_not_clear=True),
            sg.Text('', key='skill2', size=(10, 1))
        ],
        [
            sg.Text("Opener", size=(14, 1)),
            sg.InputCombo(openlist, key='open1'),
            sg.Text('', size=(7, 1)),
            sg.Text("Opener", size=(14, 1)),
            sg.InputCombo(openlist, key='open2')
        ],
        [
            sg.Text("Fight",
                    size=(14, 1),
                    tooltip='Determine fight breaks, if any'),
            sg.InputCombo(fightlist, key='fights'),
            sg.Text('', size=(10, 1)),
            sg.Checkbox('Create Logs', size=(10, 1), key='logs')
        ],
        [
            sg.Text("Length of Fight",
                    tooltip='How long is the fight',
                    size=(16, 1)),
            sg.Input(default_text='300', size=(8, 1), key='length'),
            sg.Text('', size=(9, 1)),
            sg.Checkbox('Party Modifier', size=(10, 1), key='partymod')
        ],
        [
            sg.Text(
                "Run How many Times",
                tooltip=
                'The Higher number, the longer and more accurate the sim is',
                size=(16, 1)),
            sg.Input(default_text='200', size=(7, 1), key='runtime'),
            sg.Text('', size=(10, 1)),
            sg.Checkbox('Use Potion',
                        tooltip='Will Still use if specified in opener',
                        size=(8, 1),
                        key='potion')
        ],
        [
            sg.Button('Run Sim', key='sim'),
            sg.Text('', size=(20, 1)),
            sg.Button('Set Party', key='party'),
            sg.Button('Set Buff Times', key='buffs')
        ]
    ]
    sim1 = ['wd1', 'del1', 'dex1', 'crit1', 'dh1', 'det1', 'sks1']
    sim2 = ['wd2', 'del2', 'dex2', 'crit2', 'dh2', 'det2', 'sks2']
    window = sg.Window("BRD Simulator",
                       icon='graphics\\BRD.png').Layout(layout)

    win2_active = False
    win3_active = False
    win4_active = False

    while True:
        button, values = window.Read(timeout=100)

        if button is None:
            break
        #Update window elements
        try:
            string = str(stats.determinecrit(int(
                values['crit1']))[0]) + '% ' + str(
                    stats.determinecrit(int(values['crit1']))[1]) + '% '
            window.FindElement('crate1').Update(string)
        except:
            window.FindElement('crate1').Update('')
        try:
            window.FindElement('direct1').Update(
                str(stats.determinedh(int(values['dh1']))) + '%')
        except:
            window.FindElement('direct1').Update('')
        try:
            window.FindElement('deter1').Update(
                str(stats.determinedet(int(values['det1']))) + '%')
        except:
            window.FindElement('deter1').Update('')
        try:
            window.FindElement('skill1').Update(
                stats.determinegcd(int(values['sks1'])))
        except:
            window.FindElement('skill1').Update('')
        try:
            string2 = str(stats.determinecrit(int(
                values['crit2']))[0]) + '% ' + str(
                    stats.determinecrit(int(values['crit2']))[1]) + '% '
            window.FindElement('crate2').Update(string2)
        except:
            window.FindElement('crate2').Update('')
        try:
            window.FindElement('direct2').Update(
                str(stats.determinedh(int(values['dh2']))) + '%')
        except:
            window.FindElement('direct2').Update('')
        try:
            window.FindElement('deter2').Update(
                str(stats.determinedet(int(values['det2']))) + '%')
        except:
            window.FindElement('deter2').Update('')
        try:
            window.FindElement('skill2').Update(
                stats.determinegcd(int(values['sks2'])))
        except:
            window.FindElement('skill2').Update('')

        #Process window generation when we want to change party UI
        if not win2_active and button == 'party':
            window.Hide()
            win2_active = True
            layout2 = [
                [
                    sg.Text('Job', size=(8, 1)),
                    sg.Text('Member', size=(8, 1)),
                    sg.Text('Buff Priority', size=(8, 1))
                ],
            ]
            for i in jobs.values():
                row = []
                row.append(sg.Text(i.name, size=(8, 1)))
                row.append(
                    sg.Checkbox('', size=(8, 1), default=i.active, key=i.name))
                if i.name == 'AST':
                    row.append(
                        sg.Checkbox('AST Priority',
                                    size=(8, 1),
                                    default=astpriority,
                                    key='astprio'))
                elif i.name == 'DRG':
                    row.append(
                        sg.Checkbox('DRG Tether',
                                    size=(8, 1),
                                    default=tether,
                                    key='tether'))
                elif i.name == 'DNC':
                    row.append(
                        sg.Checkbox('Partner',
                                    size=(8, 1),
                                    default=tether,
                                    key='partner'))
                layout2.append(row)
            layout2.append([sg.Button('Done')])
            win2 = sg.Window('Party Screen').Layout(layout2)

        #Process information when Sim its clicked
        if not win3_active and button == 'sim':
            simoneaction = True
            simtwoaction = True
            simonetable = []
            simtwotable = []
            fight = fights[values['fights']]
            logging = values['logs']
            build.setpmod(abilities, values['partymod'])
            potion = values['potion']
            for i in sim1:
                if values[i] == '':
                    simoneaction = False
                elif i == 'crit1':
                    rate, dam = stats.determinecrit(int(values[i]))
                    simonetable.append(rate)
                    simonetable.append(dam)
                elif i == 'dh1':
                    simonetable.append(stats.determinedh(int(values[i])))
                elif i == 'sks1':
                    simonetable.append(int(values[i]))
                    simonetable.append(stats.determinegcd(int(values[i])))
                else:
                    simonetable.append(float(values[i]))
            if not simoneaction:
                sg.PopupOK('Please enter in Values for Sim One')
            else:
                for i in sim2:
                    if values[i] == '':
                        simtwoaction = False
                    elif i == 'crit2':
                        rate, dam = stats.determinecrit(int(values[i]))
                        simtwotable.append(rate)
                        simtwotable.append(dam)
                    elif i == 'dh2':
                        simtwotable.append(stats.determinedh(int(values[i])))
                    elif i == 'sks2':
                        simtwotable.append(int(values[i]))
                        simtwotable.append(stats.determinegcd(int(values[i])))
                    else:
                        simtwotable.append(float(values[i]))
                if simtwoaction:
                    runtimes = int(values['runtime'])
                    runlength = int(values['length'])

                    opener1 = openers[values['open1']]
                    opener2 = openers[values['open2']]
                    potency1 = []
                    potency2 = []
                    layoutprog = [[sg.Text('Running Sim', key='progtext')],
                                  [
                                      sg.ProgressBar(runtimes,
                                                     orientation='h',
                                                     size=(20, 20),
                                                     key='progbar')
                                  ], [sg.Button('Cancel')]]
                    progwin = sg.Window('Running Sim One', layoutprog)
                    bar = progwin.FindElement('progbar')
                    i = runtimes
                    while i > 0:
                        progevent, progvals = progwin.Read(timeout=100)
                        if progevent == 'Cancel' or progevent is None:
                            break
                        jobruns = 0
                        if i > 5:
                            jobruns = 6
                        else:
                            jobruns = i
                        results = asyncio.run(
                            runsim(jobruns, runlength, i, opener1, fight,
                                   simonetable, abilities, party, pbuffs,
                                   buffs, dots, potion, astpriority, dncpart,
                                   logging))
                        potency1 = potency1 + results
                        i = i - jobruns
                        bar.UpdateBar(runtimes - i)
                    progwin.TKroot.title('Running Sim Two')
                    i = runtimes
                    while i > 0:
                        progevent, progvals = progwin.Read(timeout=100)
                        if progevent == 'Cancel' or progevent is None:
                            break
                        jobruns = 0
                        if i > 5:
                            jobruns = 6
                        else:
                            jobruns = i
                        results = asyncio.run(
                            runsim(jobruns, runlength, i, opener2, fight,
                                   simtwotable, abilities, party, pbuffs,
                                   buffs, dots, potion, astpriority, dncpart,
                                   logging))
                        potency2 = potency2 + results
                        i = i - jobruns
                        bar.UpdateBar(runtimes - i)
                    progwin.Close()
                    sg.PopupAnimated('graphics/loading.gif',
                                     'Finalizing your results',
                                     time_between_frames=1)

                    maxval = max(potency1)
                    minval = min(potency1)
                    if runtimes > 1:
                        aveval = statistics.mean(potency1)
                        deviation = round(statistics.stdev(potency1), 3)
                    else:
                        aveval = potency1[0]
                        deviation = potency1[0]

                    maxval2 = max(potency2)
                    minval2 = min(potency2)
                    if runtimes > 1:
                        aveval2 = statistics.mean(potency2)
                        deviation2 = round(statistics.stdev(potency2), 3)
                    else:
                        aveval2 = potency2[0]
                        deviation = potency2[0]

                    if aveval > aveval2:
                        color1 = '#3CB371'
                        color2 = '#B22222'
                    else:
                        color2 = '#3CB371'
                        color1 = '#B22222'

                    results_layout = [
                        [
                            sg.Text('Sim One'),
                            sg.Text('', size=(16, 1)),
                            sg.Text(str(round(aveval, 3)),
                                    size=(8, 1),
                                    font=('Helvetica', 20),
                                    text_color=color1),
                            sg.Text('', size=(2, 1)),
                            sg.Text('Sim Two', size=(22, 1)),
                            sg.Text(str(round(aveval2, 3)),
                                    size=(8, 1),
                                    font=('Helvetica', 20),
                                    text_color=color2)
                        ],
                        [
                            sg.Text('Weapon Damage: ', size=(14, 1)),
                            sg.Text(str(int(simonetable[0])), size=(8, 1)),
                            sg.Text('Max', size=(8, 1)),
                            sg.Text(maxval, size=(10, 1)),
                            sg.Text('Weapon Damage: ', size=(14, 1)),
                            sg.Text(str(int(simtwotable[0])), size=(8, 1)),
                            sg.Text('Max', size=(8, 1)),
                            sg.Text(maxval2)
                        ],
                        [
                            sg.Text('Weapon Delay: ', size=(14, 1)),
                            sg.Text(str(simonetable[1]), size=(8, 1)),
                            sg.Text('Min', size=(8, 1)),
                            sg.Text(minval, size=(10, 1)),
                            sg.Text('Weapon Delay: ', size=(14, 1)),
                            sg.Text(str(simtwotable[1]), size=(8, 1)),
                            sg.Text('Min', size=(8, 1)),
                            sg.Text(minval2)
                        ],
                        [
                            sg.Text('Dexterity: ', size=(14, 1)),
                            sg.Text(str(int(simonetable[2])), size=(8, 1)),
                            sg.Text('Deviation', size=(8, 1)),
                            sg.Text(deviation, size=(10, 1)),
                            sg.Text('Dexterity: ', size=(14, 1)),
                            sg.Text(str(int(simtwotable[2])), size=(8, 1)),
                            sg.Text('Deviation', size=(8, 1)),
                            sg.Text(deviation2)
                        ],
                        [
                            sg.Text('Critical Hit Rate: ', size=(14, 1)),
                            sg.Text(str(int(values['crit1'])), size=(8, 1)),
                            sg.Text('', size=(20, 1)),
                            sg.Text('Critical Hit Rate: ', size=(14, 1)),
                            sg.Text(str(int(values['crit2'])))
                        ],
                        [
                            sg.Text('Direct Hit: ', size=(14, 1)),
                            sg.Text(str(int(values["dh1"])), size=(8, 1)),
                            sg.Text('', size=(20, 1)),
                            sg.Text('Direct Hit: ', size=(14, 1)),
                            sg.Text(str(int(values['dh2'])))
                        ],
                        [
                            sg.Text('Determination: ', size=(14, 1)),
                            sg.Text(str(int(simonetable[6])), size=(8, 1)),
                            sg.Text('', size=(20, 1)),
                            sg.Text('Determination: ', size=(14, 1)),
                            sg.Text(str(int(simtwotable[6])))
                        ],
                        [
                            sg.Text('Skillspeed: ', size=(14, 1)),
                            sg.Text(str(int(simonetable[7])), size=(8, 1)),
                            sg.Text('', size=(20, 1)),
                            sg.Text('Skillspeed: ', size=(14, 1)),
                            sg.Text(str(int(simtwotable[7])))
                        ],
                        [
                            sg.Text('Opener: ', size=(14, 1)),
                            sg.Text(values["open1"], size=(30, 1)),
                            sg.Text('Opener: ', size=(14, 1)),
                            sg.Text(values["open2"])
                        ],
                        #[sg.Canvas(size=(figure_w, figure_h), key='canvas'),sg.Canvas(size=(figure_w, figure_h), key='canvas2')],
                        #[sg.Text(sim.returnpartystring())],
                        [sg.Button('Close')]
                    ]
                    if logging:
                        results_layout[9].append(
                            sg.Button('View Logs', key='logview'))
                    resultwindow = sg.Window(
                        "Sim Results",
                        force_toplevel=True).Layout(results_layout).Finalize()
                    window.Hide()
                    sg.PopupAnimated(image_source=None)
                    win3_active = True

                else:
                    runtimes = int(values['runtime'])
                    runlength = int(values['length'])
                    opener1 = openers[values['open1']]
                    fight = fights[values['fights']]
                    logging = values['logs']
                    build.setpmod(abilities, values['partymod'])
                    potion = values['potion']
                    potency1 = []
                    viewtimes = [[]]
                    abilitydict = {}
                    firstime = False
                    layoutprog = [[sg.Text('Running Sim', key='progtext')],
                                  [
                                      sg.ProgressBar(runtimes,
                                                     orientation='h',
                                                     size=(20, 20),
                                                     key='progbar')
                                  ], [sg.Button('Cancel')]]
                    progwin = sg.Window('Running Sim', layoutprog)
                    bar = progwin.FindElement('progbar')
                    i = runtimes
                    while i > 0:
                        progevent, progvals = progwin.Read(timeout=100)
                        if progevent == 'Cancel' or progevent is None:
                            break
                        jobruns = 0
                        if i > 5:
                            jobruns = 6
                        else:
                            jobruns = i
                        results, times, ability = asyncio.run(
                            run1sim(jobruns, runlength, (runtimes - i),
                                    opener1, fight, simonetable, abilities,
                                    party, pbuffs, buffs, dots, potion,
                                    astpriority, dncpart, logging))
                        potency1 = potency1 + results
                        for u in times:
                            viewtimes.append(u)
                        for u in ability.keys():
                            if ability[u] > 0:
                                if u in abilitydict.keys():
                                    abilitydict[
                                        u] = abilitydict[u] + ability[u]
                                else:
                                    abilitydict[u] = ability[u]
                        i = i - jobruns
                        bar.UpdateBar(runtimes - i)
                    progwin.Close()
                    sg.PopupAnimated('graphics/loading.gif',
                                     'Finalizing your results',
                                     time_between_frames=1)
                    maxval = max(potency1)
                    minval = min(potency1)
                    viewtimes.remove([])
                    allpotency = 0
                    for i in abilitydict.keys():
                        allpotency = allpotency + abilitydict[i]

                    for i in abilitydict.keys():
                        abilitydict[i] = round(
                            (abilitydict[i] / allpotency) * 100, 2)

                    sort = sorted(abilitydict,
                                  key=abilitydict.__getitem__,
                                  reverse=True)
                    viewtable = numpy.mean(viewtimes, axis=0)
                    if runtimes > 1:
                        aveval = round(statistics.mean(potency1), 3)
                        deviation = round(statistics.stdev(potency1), 3)
                    else:
                        aveval = round(potency1[0], 3)
                        deviation = round(potency1[0], 3)
                    if runtimes > 1:

                        plt.plot(list(range(5, runlength)), viewtable)
                        plt.xlabel('Time')
                        plt.xlabel('DPS')
                        #plt.hist(potency1,
                        #        color='blue',
                        #       edgecolor='black',
                        #      bins=int((maxval - minval)/(runtimes/(runtimes*.15))))
                        fig = plt.gcf()
                        figure_x, figure_y, figure_w, figure_h = fig.bbox.bounds
                    else:
                        figure_w = 8
                        figure_h = 1
                    results_layout = [[
                        sg.Text('Stats Used'),
                        sg.Text('', size=(16, 1)),
                        sg.Text(str(round(aveval, 3)),
                                size=(8, 1),
                                font=('Helvetica', 20))
                    ],
                                      [
                                          sg.Text('Weapon Damage: ',
                                                  size=(14, 1)),
                                          sg.Text(str(int(simonetable[0])),
                                                  size=(8, 1)),
                                          sg.Text('Max', size=(8, 1)),
                                          sg.Text(maxval)
                                      ],
                                      [
                                          sg.Text('Weapon Delay: ',
                                                  size=(14, 1)),
                                          sg.Text(str(simonetable[1]),
                                                  size=(8, 1)),
                                          sg.Text('Min', size=(8, 1)),
                                          sg.Text(minval)
                                      ],
                                      [
                                          sg.Text('Dexterity: ', size=(14, 1)),
                                          sg.Text(str(int(simonetable[2])),
                                                  size=(8, 1)),
                                          sg.Text('Deviation', size=(8, 1)),
                                          sg.Text(deviation)
                                      ],
                                      [
                                          sg.Text('Critical Hit Rate: ',
                                                  size=(14, 1)),
                                          sg.Text(str(int((values['crit1']))))
                                      ],
                                      [
                                          sg.Text('Direct Hit: ',
                                                  size=(14, 1)),
                                          sg.Text(str(int(values['dh1'])))
                                      ],
                                      [
                                          sg.Text('Determination: ',
                                                  size=(14, 1)),
                                          sg.Text(str(int(simonetable[6])))
                                      ],
                                      [
                                          sg.Text('Skillspeed: ',
                                                  size=(14, 1)),
                                          sg.Text(str(int(simonetable[7])))
                                      ],
                                      [
                                          sg.Text('Opener: ', size=(14, 1)),
                                          sg.Text(values["open1"],
                                                  size=(30, 1))
                                      ],
                                      [
                                          sg.Canvas(size=(figure_w, figure_h),
                                                    key='canvas')
                                      ]]
                    row = []
                    x = 0
                    for i in sort:
                        if x == 4:
                            row.append(
                                sg.Text(i + ' ' + str(abilitydict[i]) + '%',
                                        size=(18, 1)))
                            results_layout.append(row)
                            x = 0
                        elif x == 0:
                            row = [
                                sg.Text(i + ' ' + str(abilitydict[i]) + '%',
                                        size=(18, 1))
                            ]
                            x = x + 1
                        else:
                            row.append(
                                sg.Text(i + ' ' + str(abilitydict[i]) + '%',
                                        size=(18, 1)))
                            x = x + 1
                    if x > 0:
                        results_layout.append(row)
                    finalrow = [sg.Button('Close')]
                    if logging:
                        finalrow.append(sg.Button('View Logs', key='logview'))
                    results_layout.append(finalrow)
                    resultwindow = sg.Window(
                        "Sim Results",
                        force_toplevel=True).Layout(results_layout).Finalize()
                    window.Hide()
                    if runtimes > 1:
                        fig_photo = draw_figure(
                            resultwindow.FindElement('canvas').TKCanvas, fig)
                    sg.PopupAnimated(image_source=None)
                    win3_active = True

            #except:
            #   sg.PopupOK('Please Enter Valid Numbers')

        if not win4_active and button == 'buffs':
            bufflayout = [[sg.Text('Buff Start Times')]]
            for i in pbuffs.values():
                if not (i.name == 'Not My Card' or i.name == 'Bole'
                        or i.name == 'Balance' or i.name == 'Divination'):
                    addtolayout = []
                    addtolayout.append(sg.Text(i.name, size=(12, 1)))
                    addtolayout.append(
                        sg.Input(default_text=i.starttime,
                                 key=i.name,
                                 size=(8, 1)))
                    bufflayout.append(addtolayout)
            bufflayout.append([sg.Button('Done', key='donebuff')])
            buffwindow = sg.Window('Set Buff Timers').Layout(bufflayout)
            window.Hide()
            win4_active = True

        if win2_active:
            button2, values2 = win2.Read(timeout=100)
            if button2 is None:
                win2_active = False
                win2.Close()
                window.UnHide()
                window.BringToFront()
            elif button2 is 'Done':
                partyset = []
                membernumber = 0
                for i in jobs.values():
                    i.active = values2[i.name]
                    if values2[i.name]:
                        membernumber = membernumber + 1
                if membernumber > 7:
                    sg.PopupOK('You have to many members')
                else:
                    party = build.genparty(jobs)
                    tether = values2['tether']
                    astpriority = values2['astprio']
                    dncpart = values2['partner']
                    pbuffs = build.genpbuffs(party, tether, dncpart)
                    win2_active = False
                    win2.Close()
                    window.UnHide()
                    window.BringToFront()

        if win3_active:

            resevents, resvalus = resultwindow.Read(timeout=100)

            if resevents is None or resevents == 'Close':
                win3_active = False
                resultwindow.Close()
                window.UnHide()
                window.BringToFront()
            elif resevents is 'logview':
                logfile = open('BRD_Sim_Log1', 'r')
                sg.PopupScrolled(logfile.read(), size=(80, None))

        if win4_active:
            buffevents, buffvalues = buffwindow.Read()

            if buffevents is None:
                win4_active = False
                buffwindow.Close()
                window.UnHide()
                window.BringToFront()
            elif buffevents == 'donebuff':
                try:
                    for i in pbuffs.values():
                        i.starttime = float(buffvalues[i.name])
                        i.default = float(buffvalues[i.name])
                    win4_active = False
                    buffwindow.Close()
                    window.UnHide()
                except:
                    sg.PopupOK("Please enter valid times")
예제 #16
0
def gui():
    sg.theme('LightGreen')
    figure_w = 650
    figure_h = 650
    # define the form layout
    layout = [[sg.Text('Demo - Pressure Response',  justification='center', font='Helvetica 20')],
              [sg.Canvas(size=(figure_w, figure_h), key='-CANVAS_plot-'), sg.Canvas(size=(figure_w, figure_h), key='-CANVAS_image-') ,],
              # [sg.Text('Force value and coordinates:',size=(40, 1),font='Helvetica 20'),
              [sg.Text('Force value and coordinates:',font='Helvetica 20'),
              sg.Text( 'loading:',font='Helvetica 20', key='-OUTPUT-')],
              # [[sg.Button('Connect',size=(10, 2), pad=((280, 20), 3), font='Helvetica 14')],
              [sg.Button('Connect',size=(10, 2), font='Helvetica 14'),
              sg.Button('Exit', size=(10, 2),  font='Helvetica 14')]]

    # create the form and show it without the plot
    window = sg.Window('Demo - Pressure Response', layout, resizable=True, finalize=True)

    image_elem = window['-CANVAS_image-']

    canvas_plot_elem = window['-CANVAS_plot-']
    canvas_plot = canvas_plot_elem.TKCanvas
    # draw the intitial scatter plot
    fig = plt.figure(figsize=(8,6))

    ax = fig.add_subplot(111, projection='3d')
    # fig, ax = plt.subplots(111, projection='3d')
    ax.grid(True)
    fig_agg = draw_figure(canvas_plot, fig)

    X = np.arange(-5, 5, 0.25)
    Y = np.arange(-5, 5, 0.25)
    X, Y = np.meshgrid(X, Y)

    count = 0
    while True:
        event, values = window.read(timeout=10)
        if event in ('Exit', None):
            exit(69)
        if event in ('Connect', None):
            sg.popup_ok('Successful Connection')  # Shows OK button
        window['-OUTPUT-'].update('null')

        ax.cla()
        ax.grid(True)
        R = np.sqrt(X ** 2 + Y ** 2)
        # Z = np.sin(R+Datamatrix)
        Z = np.sin(R+count)
        # surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet,
        #                    linewidth=0, antialiased=False)
        ax.plot_wireframe(X, Y, Z, rstride=1, cstride=1)
        ax.set_zlim3d(-1.01, 1.01)

    # ax.w_zaxis.set_major_locator(LinearLocator(10))
    # ax.w_zaxis.set_major_formatter(FormatStrFormatter('%.03f'))

        # fig.colorbar(surf, shrink=0.5, aspect=5) ## Show colorbar
        ax.legend()
        fig_agg.draw()
        count = count + 1

    # show camera image
        # imgbytes = cv.imencode('.png', cv_image)[1].tobytes()  # ditto

        # img = Image.fromarray(cv_image)    # create PIL image from frame
        # bio = io.BytesIO()              # a binary memory resident stream
        # img.save(bio, format= 'PNG')    # save image as png to it
        # imgbytes = bio.getvalue()       # this can be used by OpenCV hopefully


        # image_elem.update(data=imgbytes)
    window.close()
예제 #17
0
파일: test.py 프로젝트: Owlbearpig/SimsV2_1
    toolbar.update()
    figure_canvas_agg.get_tk_widget().pack(side='right', fill='both', expand=1)


class Toolbar(NavigationToolbar2Tk):
    def __init__(self, *args, **kwargs):
        super(Toolbar, self).__init__(*args, **kwargs)


# ------------------------------- PySimpleGUI CODE

layout = [
    [sg.T('Graph: y=sin(x)')],
    [sg.B('Plot'), sg.B('Exit')],
    [sg.T('Controls:')],
    [sg.Canvas(key='controls_cv')],
    [sg.T('Figure:')],
    [
        sg.Column(
            layout=[[
                sg.Canvas(
                    key='fig_cv',
                    # it's important that you set this size
                    size=(400 * 2, 400))
            ]],
            background_color='#DAE0E6',
            pad=(0, 0))
    ],
    [sg.B('Alive?')]
]
예제 #18
0
               ]]

reload_plot = [[
    sg.FileBrowse('Browse',
                  initial_folder='E:\Python_files\Scan_Data',
                  key='-FPATH-',
                  button_color=('white', 'grey'),
                  size=(7, 2)),
    sg.Button('PLOT',
              button_color=('black', 'yellow'),
              size=(9, 2),
              disabled=False)
]]

layout = [[
    sg.Canvas(size=(250, 250), background_color='black', key='canvas'),
    sg.Frame('SCANNER', col_scan),
    sg.Frame('CONTROL', col_control, element_justification="center")
], [sg.Frame('RE-PLOT', reload_plot)],
          [
              sg.Input('Please connect the device',
                       key='-MSG-',
                       justification='center')
          ]]

window = sg.Window('3D SCAN', layout, return_keyboard_events=True)

#Flag Variables
FL_CON = False
FL_SCAN = False
FL_DONE = False
예제 #19
0
    def run(self, action):
        if action is not "gui":
            self.perform_command_line(action)
            return

        sg.theme('DarkAmber')

        star_tab_layout = [[sg.T('Plotting expected star color\n')],
                           [
                               sg.Text('Select star type:'),
                               sg.Combo(
                                   available_templates,
                                   key='star_type',
                                   default_value=self.used_config['star_type'])
                           ],
                           [
                               sg.Text('Saturation:'),
                               sg.Input(key='saturation',
                                        default_text='1.0',
                                        size=(10, ))
                           ], [sg.Button('Check star color')]]

        emission_tab_layout = [[
            sg.T('Plotting expected emission lines color\n')
        ], [sg.Text('Select emission lines:')],
                               [
                                   sg.Combo(available_emission_lines,
                                            key='emission_line_1',
                                            default_value='H alpha'),
                                   sg.Text('Strength: '),
                                   sg.Input(key='emission_line_1_strength',
                                            default_text='1.0',
                                            size=(10, ))
                               ],
                               [
                                   sg.Combo(available_emission_lines,
                                            key='emission_line_2',
                                            default_value='OIII'),
                                   sg.Text('Strength: '),
                                   sg.Input(key='emission_line_2_strength',
                                            default_text='1.0',
                                            size=(10, ))
                               ],
                               [
                                   sg.Combo(available_emission_lines,
                                            key='emission_line_3',
                                            default_value='SII'),
                                   sg.Text('Strength: '),
                                   sg.Input(key='emission_line_3_strength',
                                            default_text='1.0',
                                            size=(10, ))
                               ], [sg.Button('Check lines combined color')]]

        layout = [[
            sg.Text('Select camera:'),
            sg.Combo(available_cameras,
                     key='camera',
                     default_value=self.used_config['camera']),
        ],
                  [
                      sg.Text('Select master filter (for all channels):'),
                      sg.Combo(available_filters,
                               key='filter_L',
                               default_value=self.used_config['filter_L']),
                  ],
                  [
                      sg.Text('Select filter for R channel:'),
                      sg.Combo(available_filters,
                               key='filter_R',
                               default_value=self.used_config['filter_R']),
                      sg.Text('Multiplier:'),
                      sg.Input(key='red_x', default_text='1.0', size=(10, )),
                  ],
                  [
                      sg.Text('Select filter for G channel:'),
                      sg.Combo(available_filters,
                               key='filter_G',
                               default_value=self.used_config['filter_G']),
                      sg.Text('Multiplier:'),
                      sg.Input(key='green_x', default_text='1.0', size=(10, )),
                  ],
                  [
                      sg.Text('Select filter for B channel:'),
                      sg.Combo(available_filters,
                               key='filter_B',
                               default_value=self.used_config['filter_B']),
                      sg.Text('Multiplier:'),
                      sg.Input(key='blue_x', default_text='1.0', size=(10, )),
                  ],
                  [
                      sg.TabGroup([[
                          sg.Tab('Stars', star_tab_layout),
                          sg.Tab('Emission lines', emission_tab_layout)
                      ]])
                  ], [sg.Button('Plot responses')],
                  [sg.Canvas(key='-CANVAS-')], [sg.Button('Exit')]]

        self.window = sg.Window('Choose configuration', layout)
        while True:
            event, values = self.window.read()
            if event is None:
                break
            if event is 'Exit':
                exit(0)

            if event is 'Check star color':
                config = validate_config(values)
                print('You entered ', config)
                self.get_responses(config)
                self.plot_star(self.get_rgb_color(config), config)
                self.fig.savefig("_current_star_.png")
                self.draw_figure(self.window['-CANVAS-'].TKCanvas)

            if event is 'Plot responses':
                config = validate_config(values)
                self.get_responses(config)
                self.window['-CANVAS-'].TKCanvas.delete("ALL")
                self.plot_responses(config)
                self.fig.savefig("_current_responses_.png")
                self.draw_figure(self.window['-CANVAS-'].TKCanvas)

        self.window.close()
예제 #20
0
#------------------------------- Beginning of GUI CODE -------------------------------
layout = [[
    sg.Button('Launch visualisation'),
    sg.Button('Launch visualisation 2')
]]

window = sg.Window('Have some Matplotlib....', layout)

while True:
    for i in range(2):
        event, values = window.read(timeout=100)
        if event == "Launch visualisation":
            # define the window layout
            layout = [[sg.Text('Plot test', font='Any 18')],
                      [sg.Canvas(key='canvas')],
                      [sg.OK(pad=((figure_w / 2, 0), 3), size=(4, 2))]]

            # create the form and show it without the plot
            window_graph = sg.Window(
                'Demo Application - Embedding Matplotlib In PySimpleGUI',
                force_toplevel=False).Layout(layout).Finalize()

            # add the plot to the window
            # fig_photo = draw_figure(window_graph.FindElement('canvas').TKCanvas, fig)

            # show it all again and get buttons
            event_graph, values_graph = window_graph.Read()

        if event == "Launch visualisation 2":
            layout = [[sg.Text('Plot test', font='Any 18')],
예제 #21
0
def main():
    fruit_fly_chromosomes = {
        'Chromosome X': 'NC_004354.4',
        'Chromosome 2L': 'NT_033779.5',
        'Chromosome 2R': 'NT_033778.4',
        'Chromosome 3L': 'NT_037436.4',
        'Chromosome 4': 'NC_004353.4',
        'Chromosome 3R': 'NT_033777.3',
        'Chromosome Y': 'NC_024512.1'
    }

    menu_def = [[
        '&File',
        [
            '&Start',
            [
                'Drosophila Melanogaster',
                list(fruit_fly_chromosomes.keys()), '---', 'COVID-19'
            ], '---', 'E&xit'
        ]
    ], ['&Help', '&About...']]

    sg.theme('SystemDefault')

    layout = [[sg.Menu(menu_def, key='-MENU-')],
              [
                  sg.Text(size=(50, 1),
                          font=('Helvetica', 20),
                          key='-DESCRIPTION-'),
                  sg.Text(size=(30, 1),
                          font=('Helvetica', 20),
                          key='-ENTROPY-')
              ], [sg.Canvas(size=(1280, 720), key='-CANVAS-')],
              [
                  sg.Slider(range=(1, 100000),
                            default_value=100000,
                            size=(100, 10),
                            orientation="h",
                            enable_events=True,
                            key="-SLIDER-")
              ]]

    window = sg.Window("Entropy Fruit Fly",
                       layout,
                       return_keyboard_events=True,
                       use_default_focus=False,
                       resizable=True,
                       element_justification='c',
                       finalize=True)
    window['-SLIDER-'].bind('<ButtonRelease-1>', ' Release')
    #window.Maximize()
    running = False
    # ---===--- Loop taking in user input --- #
    while True:
        event, values = window.read(timeout=100)

        if event in (sg.WIN_CLOSED, 'Exit'):
            sg.popup_animated(None)
            break
        #print(event, values)
        if event == 'About...':
            sg.popup('Entropy Drosophila Melanogaster', 'Version 1.1',
                     '© Davide Cerizza')
        if 'Chromosome' in event:
            window['-DESCRIPTION-'].update(fruit_fly_chromosomes[event])
            event = '-SLIDER- Release'
        if event == 'COVID-19':
            window['-DESCRIPTION-'].update('NC_045512.2')
            event = '-SLIDER- Release'
        if event == '-SLIDER- Release' and not running and window[
                '-DESCRIPTION-'].get() != '':
            sg.popup_animated(sg.DEFAULT_BASE64_LOADING_GIF,
                              message='Wait..',
                              text_color='black',
                              background_color='white',
                              transparent_color='white',
                              time_between_frames=100)
            running = True
            window['-SLIDER-'].update(disabled=True)
            window.perform_long_operation(
                lambda: evaluate_entropy((window['-DESCRIPTION-'].get().split(
                ))[0], int(values['-SLIDER-'])), '-OPERATION DONE-')
        elif event == '-OPERATION DONE-':
            sg.popup_animated(None)
            running = False
            window['-SLIDER-'].update(disabled=False)

            if 'figure_canvas_agg' in locals():
                figure_canvas_agg.get_tk_widget().forget()
            plt.close('all')

            plt.figure(1, facecolor="#F0F0F0", figsize=[12.8, 7.20])
            plt.xlim(0, list((values[event])['entropy'].keys())[-1])
            plt.step((values[event])['entropy'].keys(),
                     (values[event])['entropy'].values())
            plt.ylabel("Entropy")
            plt.grid(color='b', linestyle='--', linewidth=0.5)

            figure_canvas_agg = FigureCanvasTkAgg(plt.gcf(),
                                                  window['-CANVAS-'].TKCanvas)
            figure_canvas_agg.draw()
            figure_canvas_agg.get_tk_widget().pack(side='top',
                                                   fill='both',
                                                   expand=1)

            window['-DESCRIPTION-'].update((values[event])['description'])
            window['-ENTROPY-'].update('Nucleobases Entropy = %.10f' %
                                       (values[event])['totalentropy'])

        if running:
            sg.popup_animated(sg.DEFAULT_BASE64_LOADING_GIF,
                              message='Wait..',
                              text_color='black',
                              background_color='white',
                              transparent_color='white',
                              time_between_frames=100)
    window.close()
    figure_canvas_agg = FigureCanvasTkAgg(figure, canvas)
    figure_canvas_agg.draw()
    figure_canvas_agg.get_tk_widget().pack(side="top", fill="both", expand=1)
    return figure_canvas_agg


# ------------------------------- Beginning of GUI CODE -------------------------------
sg.theme("Light Brown 3")

fig = plt.gcf()  # if using Pyplot then get the figure from the plot
figure_x, figure_y, figure_w, figure_h = fig.bbox.bounds

# define the window layout
layout = [
    [sg.Text("Plot test", font="Any 18")],
    [sg.Canvas(size=(figure_w, figure_h), key="-CANVAS-")],
    [sg.OK(pad=((figure_w / 2, 0), 3), size=(4, 2))],
]

# create the form and show it without the plot
window = sg.Window(
    "Demo Application - Embedding Matplotlib In PySimpleGUI",
    layout,
    force_toplevel=True,
    finalize=True,
)

# add the plot to the window
# fig_photo = draw_figure(window['-CANVAS-'].TKCanvas, fig)

# show it all again and get buttons
예제 #23
0
    def Layout(self):
        Connect = [sg.Button("Connect or Disconnect", key="-Connect-")]

        SetPose = [
            [
                sg.Button("Set pose", size=(7, 1), key="-SetJointPose-"),
                sg.Button("Set pose", size=(7, 1), key="-SetCoordinatePose-"),
            ],
            [
                sg.Text("J1", size=(2, 1)),
                sg.InputText("", size=(5, 1), key="-JointPose1-"),
                sg.Text("X", size=(1, 1)),
                sg.InputText("", size=(5, 1), key="-CoordinatePose_X-"),
            ],
            [
                sg.Text("J2", size=(2, 1)),
                sg.InputText("", size=(5, 1), key="-JointPose2-"),
                sg.Text("Y", size=(1, 1)),
                sg.InputText("", size=(5, 1), key="-CoordinatePose_Y-"),
            ],
            [
                sg.Text("J3", size=(2, 1)),
                sg.InputText("", size=(5, 1), key="-JointPose3-"),
                sg.Text("Z", size=(1, 1)),
                sg.InputText("", size=(5, 1), key="-CoordinatePose_Z-"),
            ],
            [
                sg.Text("J4", size=(2, 1)),
                sg.InputText("", size=(5, 1), key="-JointPose4-"),
                sg.Text("R", size=(1, 1)),
                sg.InputText("", size=(5, 1), key="-CoordinatePose_R-"),
            ],
        ]

        # 画像上の位置とDobotの座標系との位置合わせを行うGUI
        Alignment = [[
            sg.Button('MoveToThePoint', size=(16, 1), key='-MoveToThePoint-'),
        ],
                     [
                         sg.Button('Set', size=(8, 1), key='-Record-'),
                         sg.Button('Set', size=(8, 1), key='-Set_x1-'),
                         sg.Button('Set', size=(8, 1), key='-Set_x2-'),
                     ],
                     [
                         sg.Text('X0', size=(2, 1)),
                         sg.InputText('',
                                      size=(5, 1),
                                      disabled=True,
                                      key='-x0-'),
                         sg.Text('X1', size=(2, 1)),
                         sg.InputText('',
                                      size=(5, 1),
                                      disabled=True,
                                      key='-x1-'),
                         sg.Text('X2', size=(2, 1)),
                         sg.InputText('',
                                      size=(5, 1),
                                      disabled=True,
                                      key='-x2-'),
                     ],
                     [
                         sg.Text('Y0', size=(2, 1)),
                         sg.InputText('',
                                      size=(5, 1),
                                      disabled=True,
                                      key='-y0-'),
                         sg.Text('Y1', size=(2, 1)),
                         sg.InputText('',
                                      size=(5, 1),
                                      disabled=True,
                                      key='-y1-'),
                         sg.Text('Y2', size=(2, 1)),
                         sg.InputText('',
                                      size=(5, 1),
                                      disabled=True,
                                      key='-y2-'),
                     ],
                     [
                         sg.Text('Z0', size=(2, 1)),
                         sg.InputText('',
                                      size=(5, 1),
                                      disabled=True,
                                      key='-z0-'),
                     ],
                     [
                         sg.Text('R0', size=(2, 1)),
                         sg.InputText('',
                                      size=(5, 1),
                                      disabled=True,
                                      key='-r0-'),
                     ]]

        WebCamConnect = [
            [
                # Web_Cameraの接続/解放
                sg.Button("WEB CAM on/off", size=(15, 1), key="-SetWebCam-"),
                # カメラのプレビュー
                sg.Button("Preview Opened", size=(11, 1), key="-Preview-"),
                # 静止画撮影
                sg.Button("Snapshot", size=(7, 1), key="-Snapshot-"),
            ],
            [
                # PCに接続されているカメラの選択
                sg.InputCombo(
                    (
                        "TOSHIBA_Web_Camera-HD",
                        "Logicool_HD_Webcam_C270",
                    ),
                    default_value="TOSHIBA_Web_Camera-HD",
                    size=(15, 1),
                    key="-WebCam_Name-",
                    readonly=True,
                ),
                # 解像度の選択
                sg.InputCombo(
                    (
                        "640x480",
                        "352x288",
                        "320x240",
                        "176x144",
                        "160x120",
                        "1280x720",
                        "1280x800",
                    ),
                    size=(11, 1),
                    key="-WebCam_FrameSize-",
                    readonly=True,
                ),
            ],
            [
                # 画像のサイズ・チャンネル数
                sg.Text("width", size=(4, 1)),
                sg.InputText(
                    "0",
                    size=(5, 1),
                    disabled=True,
                    justification="right",
                    key="-IMAGE_width-",
                ),
                sg.Text("height", size=(4, 1)),
                sg.InputText(
                    "0",
                    size=(5, 1),
                    disabled=True,
                    justification="right",
                    key="-IMAGE_height-",
                ),
                sg.Text("channel", size=(6, 1)),
                sg.InputText(
                    "0",
                    size=(5, 1),
                    disabled=True,
                    justification="right",
                    key="-IMAGE_channel-",
                ),
            ],
            # 画像の色・濃度・フィルタリング
            [
                sg.Text('色空間', size=(5, 1)),
                sg.InputCombo((
                    'RGB',
                    'Glay',
                    'HSV',
                ),
                              size=(4, 1),
                              key='-Color_Space-',
                              readonly=True),
                sg.Text('濃度変換', size=(7, 1)),
                sg.InputCombo(
                    (
                        'なし',
                        '線形濃度変換',
                        '非線形濃度変換',  # ガンマ処理
                        'ヒストグラム平坦化',
                    ),
                    default_value="なし",
                    size=(18, 1),
                    key='-Color_Density-',
                    readonly=True),
                sg.Text('空間フィルタリング', size=(16, 1)),
                sg.InputCombo((
                    'なし',
                    '平均化',
                    'ガウシアン',
                    'メディアン',
                ),
                              size=(10, 1),
                              key='-Color_Filtering-',
                              readonly=True),
            ],
        ]

        Contours = [
            [
                sg.Button('Contours', size=(7, 1), key='-Contours-'),
                sg.InputCombo((
                    '画像をもとに計算',
                    '輪郭をもとに計算',
                ),
                              size=(16, 1),
                              key='-CenterOfGravity-')
            ],
            [
                sg.Text('Gx', size=(2, 1)),
                sg.InputText('0',
                             size=(5, 1),
                             disabled=True,
                             justification='right',
                             key='-CenterOfGravity_x-'),
                sg.Text('Gy', size=(2, 1)),
                sg.InputText('0',
                             size=(5, 1),
                             disabled=True,
                             justification='right',
                             key='-CenterOfGravity_y-'),
            ],
        ]

        ColorOfObject = [
            [
                sg.Radio('R',
                         group_id='color',
                         background_color='grey59',
                         text_color='red',
                         key='-color_R-'),
                sg.Radio('G',
                         group_id='color',
                         background_color='grey59',
                         text_color='green',
                         key='-color_G-'),
                sg.Radio('B',
                         group_id='color',
                         background_color='grey59',
                         text_color='blue',
                         key='-color_B-'),
                sg.Radio('W',
                         group_id='color',
                         background_color='grey59',
                         text_color='snow',
                         key='-color_W-'),
                sg.Radio('Bk',
                         group_id='color',
                         default=True,
                         background_color='grey59',
                         text_color='grey1',
                         key='-color_Bk-')
            ],
        ]

        Bin_CommonSettings = [
            [
                sg.Text('閾値の処理方法'),
                sg.InputCombo((
                    'BINARY',
                    'BINARY_INV',
                    'TRUNC',
                    'TOZERO',
                    'TOZERO_INV',
                ),
                              size=(12, 1),
                              key='-Threshold_type-',
                              readonly=True)
            ],
            [sg.Checkbox('ヒストグラム平坦化', key='-EqualizeHist-')],
            [
                sg.Checkbox('ガウシアンフィルタ', key='-Gaussian-'),
            ],
        ]

        # 画像から物体の輪郭を切り出す関数の設定部分_GUI
        ContourExtractionSettings = [
            # 輪郭のモードを指定する
            [
                sg.Text('輪郭', size=(10, 1)),
                sg.InputCombo((
                    '親子関係を無視する',
                    '最外の輪郭を検出する',
                    '2つの階層に分類する',
                    '全階層情報を保持する',
                ),
                              size=(20, 1),
                              key='-ContourRetrievalMode-',
                              readonly=True),
            ],
            # 近似方法を指定する
            [
                sg.Text('近似方法', size=(10, 1)),
                sg.InputCombo(('中間点を保持する', '中間点を保持しない'),
                              size=(18, 1),
                              key='-ApproximateMode-',
                              readonly=True),
            ],
            # カーネルの形を指定する
            [
                sg.Text('カーネルの形', size=(10, 1)),
                sg.InputCombo(('矩形', '楕円形', '十字型'),
                              size=(6, 1),
                              key='-KernelShape-',
                              readonly=True),
            ],
        ]

        # 大域的二値化
        Global_Threshold = [
            [
                sg.Radio('Global Threshold',
                         group_id='threshold',
                         key='-GlobalThreshold-'),
            ],
            [
                sg.Text('Threshold', size=(7, 1)),
                sg.InputText('127',
                             size=(4, 1),
                             justification='right',
                             key='-threshold-')
            ],
            [sg.Checkbox('大津の二値化', key='-OTSU-')],
        ]

        # 適応的二値化
        Adaptive_Threshold = [
            [
                sg.Radio('Adaptive Threshold',
                         group_id='threshold',
                         key='-AdaptiveThreshold-'),
            ],
            [
                sg.InputCombo(('MEAN_C', 'GAUSSIAN_C'),
                              size=(12, 1),
                              key='-AdaptiveThreshold_type-',
                              readonly=True)
            ],
            [
                sg.Text('Block Size', size=(8, 1)),
                sg.InputText('11',
                             size=(4, 1),
                             justification='right',
                             key='-AdaptiveThreshold_BlockSize-'),
            ],
            [
                sg.Text('Constant', size=(8, 1)),
                sg.InputText('2',
                             size=(4, 1),
                             justification='right',
                             key='-AdaptiveThreshold_constant-')
            ],
        ]

        # 2つの閾値を用いた二値化
        TwoThreshold = [[
            sg.Radio('TwoThreshold',
                     group_id='threshold',
                     default=True,
                     key='-Twohreshold-'),
        ],
                        [
                            sg.Text('Lower', size=(4, 1)),
                            sg.Slider(range=(0, 127),
                                      default_value=10,
                                      orientation='horizontal',
                                      size=(12, 12),
                                      key='-LowerThreshold-'),
                        ],
                        [
                            sg.Text('Upper', size=(4, 1)),
                            sg.Slider(range=(128, 256),
                                      default_value=138,
                                      orientation='horizontal',
                                      size=(12, 12),
                                      key='-UpperThreshold-')
                        ]]

        layout = [
            Connect,
            [
                sg.Col(SetPose, size=(165, 136)),
            ],
            [
                sg.Col(WebCamConnect),
                sg.Frame('画像の重心計算', Contours),
            ],
            [
                sg.Image(filename='',
                         size=(self.Image_width, self.Image_height),
                         key='-IMAGE-'),
                sg.Canvas(size=(self.Image_width, self.Image_height),
                          key='-CANVAS-')
            ],
            [
                sg.Col(Global_Threshold, size=(200, 115)),
                sg.Col(Adaptive_Threshold, size=(200, 115)),
                sg.Col(TwoThreshold, size=(200, 115)),
            ],
            [sg.Quit()],
        ]

        return layout
    tkagg.blit(photo, figure_canvas_agg.get_renderer()._renderer, colormode=2)
    return photo


#------------ Matplotlib code ----------------------
#see https://matplotlib.org/
fig = plt.figure()
ax = fig.add_subplot(111)
#x-values
x = np.linspace(-np.pi*2, np.pi*2, 100)
#y-values
y = np.sin(x)
plt.plot(x,y)

ax.set_title('sin(x)')
figure_x, figure_y, figure_w, figure_h = fig.bbox.bounds

#------------End Matplotlib code --------------------

layout = [[sg.Text('Plot Test - PySimpleGUI and Matplotlib', font = ('Calibri', 18, 'bold'))],
          [sg.Canvas(size = (figure_w, figure_h), key = '_canvas_')],
          [sg.OK(pad=((figure_w / 2, 0), 3), size=(6, 2))]]

window = sg.Window('Matplot in PySimpleGUI', force_toplevel = True).Layout(layout).Finalize()

fig_photo = draw_figure(window.FindElement('_canvas_').TKCanvas, fig)

button, value = window.Read()


예제 #25
0
import PySimpleGUI as gui

layout = [
           [gui.Canvas(size=(100,100), background_color='red', key='canvas')],
           [gui.T('Change circle color to:'), gui.ReadFormButton('Red'), gui.ReadFormButton('Blue')]
           ]

form = gui.FlexForm('Canvas test')
form.Layout(layout)
form.ReadNonBlocking()

cir = form.FindElement('canvas').TKCanvas.create_oval(50, 50, 100, 100)

while True:
    button, values = form.Read()
    if button is None:
        break
    if button is 'Blue':
        form.FindElement('canvas').TKCanvas.itemconfig(cir, fill = "Blue")
    elif button is 'Red':
        form.FindElement('canvas').TKCanvas.itemconfig(cir, fill = "Red")
예제 #26
0
backSet = set()
goSet = set()
gamesMapping = {}
colNum = 2
for game in games:
    gamesMapping[game] = '-COL{}-'.format(colNum)
    backSet.add('-BACK{}-'.format(colNum))
    goSet.add('-GO{}-'.format(colNum))
    colNum += 1
backSet.add('-BACK0-')

menu = [[sg.Text("Which game to simulate rolls?")],
        [sg.Button(game) for game in games], [sg.Button("Exit")]]

graph = [[sg.Text("Results of Simulation")], [sg.Canvas(key="-CANVAS-")],
         [
             sg.Button('Save image', key='-SAVE-'),
             sg.Button('Back', key='-BACK0-'),
             sg.Button('Exit', key='-EXIT-')
         ]]

arknights = [[sg.Text("Unit rarity:")],
             [
                 sg.Radio('6 Star', 'RADIO1', default=True, key="-ARKRARE6-"),
                 sg.Radio('5 Star', 'RADIO1', default=False, key="-ARKRARE5-")
             ], [sg.Checkbox('Rate up unit?', default=False, key="-ARKRU-")],
             [sg.Text("Number of rate up units:")],
             [
                 sg.Radio('1', 'RADIO5', default=True, key="-ARKRU1-"),
                 sg.Radio('2', 'RADIO5', default=False, key="-ARKRU2-"),
예제 #27
0
    photo = Tk.PhotoImage(master=canvas, width=figure_w, height=figure_h)
    canvas.create_image(loc[0] + figure_w / 2,
                        loc[1] + figure_h / 2,
                        image=photo)
    tkagg.blit(photo, figure_canvas_agg.get_renderer()._renderer, colormode=2)
    return photo


# ------------------------------- Beginning of GUI CODE -------------------------------

fig = plt.gcf()  # if using Pyplot then get the figure from the plot
figure_x, figure_y, figure_w, figure_h = fig.bbox.bounds

# define the window layout
layout = [[sg.Text('Plot test', font='Any 18')],
          [sg.Canvas(size=(figure_w, figure_h), key='canvas')],
          [sg.OK(pad=((figure_w / 2, 0), 3), size=(4, 2))]]

# create the form and show it without the plot
window = sg.Window('Demo Application - Embedding Matplotlib In PySimpleGUI',
                   layout,
                   force_toplevel=True,
                   finalize=True)

# add the plot to the window
fig_photo = draw_figure(window['canvas'].TKCanvas, fig)

# show it all again and get buttons
event, values = window.read()

window.close()
예제 #28
0
        sg.Button('Fit',
                  enable_events=True,
                  key='-FIT-',
                  font='Helvetica 16',
                  size=(10, 1))
    ],
    [
        sg.Text("Gaussian noise (std. devition)", font=('Helvetica', 12)),
        sg.Slider(range=(0, 6),
                  default_value=3,
                  size=(20, 20),
                  orientation='h',
                  font=('Helvetica', 12),
                  key='-NOISE-')
    ],
    [sg.Canvas(size=(350, 350), key='-CANVAS-', pad=(20, 20))],
    [sg.Button('Exit')],
]

# Create the window
window = sg.Window('Polynomial fitting', layout, size=(700, 700))

# Event loop
fig_agg = None
while True:
    event, values = window.read()
    if event in (sg.WIN_CLOSED, 'Exit'):
        break
    if event == '-GENERATE-':
        noise = values['-NOISE-']
        if fig_agg is not None:
# fig = matplotlib.figure.Figure(figsize=(5, 4), dpi=100)
# t = np.arange(0, 3, .01)
# fig.add_subplot(111).plot(t, 2 * np.sin(2 * np.pi * t))

# ------------------------------- END OF YOUR MATPLOTLIB CODE -------------------------------

# ------------------------------- Beginning of Matplotlib helper code -----------------------

def draw_figure(canvas, figure):
    figure_canvas_agg = FigureCanvasTkAgg(figure, canvas)
    figure_canvas_agg.draw()
    figure_canvas_agg.get_tk_widget().pack(side='top', fill='both', expand=1)
    return figure_canvas_agg

# ------------------------------- Beginning of GUI CODE -------------------------------

# define the window layout
layout = [[sg.Text('Plot test')],
          [sg.Canvas(key='-CANVAS-')],
          [sg.Button('Ok')]]

# create the form and show it without the plot
window = sg.Window('Demo Application - Embedding Matplotlib In PySimpleGUI', layout, finalize=True, element_justification='center', font='Helvetica 18')

# add the plot to the window
fig_canvas_agg = draw_figure(window['-CANVAS-'].TKCanvas, fig)

event, values = window.read()

window.close()
예제 #30
0
def main():
    # define the form layout
    layout = [[
        sg.Text('Animated Matplotlib',
                size=(40, 1),
                justification='center',
                font='Helvetica 20')
    ], [sg.Canvas(size=(640, 480), key='-CANVAS-')],
              [sg.Canvas(key='-CANVAS2-')],
              [
                  sg.Button('Exit',
                            size=(10, 2),
                            pad=((280, 0), 3),
                            font='Helvetica 14')
              ],
              [
                  sg.Button('Start',
                            key="live_plot",
                            size=(10, 2),
                            pad=((280, 0), 3),
                            font='Helvetica 14')
              ]]

    # create the form and show it without the plot
    window = sg.Window(
        'Demo Application - Embedding Matplotlib In PySimpleGUI',
        layout,
        finalize=True)

    canvas_elem = window['-CANVAS-']
    canvas2 = window['-CANVAS2-']
    canvas = canvas_elem.TKCanvas
    # draw the intitial plot
    style.use("ggplot")
    fig, ax = plt.subplots()
    fig_agg = draw_figure(canvas, fig)
    index_number_array = [1, 2, 3, 4]
    zscore_array = [3, 2, 1, 0]

    while True:
        event, values = window.read(timeout=10)
        if event in ("Exit", sg.WIN_CLOSED):  # always,  always give a way out!
            break
        elif event == 'live_plot':
            global thread_live
            if not thread:
                thread = True
                threading.Thread(target=increase,
                                 args=(index_number_array, zscore_array),
                                 daemon=True).start()
                window['live_plot'].update("Stop")
            else:
                thread = False
                window['live_plot'].update("Start")

        #ax.cla()
        #ax.clear()
        ax.plot(index_number_array, zscore_array, color='orange')
        ax.set_title("Live Plot")
        ax.set_xlabel('Time(s)', fontsize=10)
        ax.set_ylabel('Z-Score', fontsize='medium')
        fig_agg.draw()
    window.close()