Несколько графических интерфейсов общаются взад и вперед - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть два графических интерфейса, и я хочу, чтобы эти интерфейсы могли общаться вместе.Я использовал Matlab в прошлом, а в Matlab я использовал addlistener и в основном общался между несколькими приложениями.Я новичок в Python, и я хочу, чтобы при нажатии кнопки «Показать» на моем втором графическом интерфейсе обновлялись оси на моем первом графическом интерфейсе.По сути, нанесите изображение на другой графический интерфейс на основе выбранного мной пути.

Вот изображение для лучшего понимания

Вот код:

from tkinter import *
from PIL import Image, ImageTk
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import 
FigureCanvasTkAgg
import PySimpleGUI as sg
import tkinter.filedialog as fdialog
from natsort import natsorted
import os
import cv2


class MyCanvas(Canvas):


def __init__(self, parent=None, img=None, *parms, **kparms):
    Canvas.__init__(self, parent, *parms, **kparms)

    self._width = 20;
    self._height = 10;
    self._starting_drag_position = ()
    self.config(width=self._width, height=self._height, bg='white')
    self._draw_some_example_objects()

    self.pack(fill=BOTH, expand=YES)

def _draw_some_example_objects(self):
    self.fig = Figure()
    gs = self.fig.add_gridspec(5, 2)
    self.axis= self.fig.add_subplot(gs[0:4, 0])
    self.canvas = FigureCanvasTkAgg(self.fig, master=self)
    self.canvas.get_tk_widget().pack(side="top", fill='both', expand=True)
    colors = dict(outline="black")

class MyGUI(Tk):

def __init__(self, *args, **kwargs):
    Tk.__init__(self, *args, **kwargs)
    self.title("Drag canvas with mouse")
    self.geometry("700x700")
    """For some reason menu should be added here"""
    self.menuBar = Menu(master=self)
    self.filemenu = Menu(self.menuBar, tearoff=0)
    self.filemenu.add_command(label="listview!", command=self.list)
    self.menuBar.add_cascade(label="File", menu=self.filemenu)
    self.config(menu=self.menuBar)

    self._addWidgets()

def _addWidgets(self):
    my_canvas = MyCanvas(self)

def list(self):
    listView(self)


def listView(self):
sg.ChangeLookAndFeel('GreenTan')

dir = fdialog.askdirectory()
filesList = os.listdir(dir)
filesList = natsorted(filesList)
layout = [
       [sg.Listbox(values=(filesList), size=(60, 30), key='_IN_')],
       [sg.Button('Show')]
]

window = sg.Window('Everything bagel', default_element_size=(40, 1), grab_anywhere=False).Layout(layout)

while True:
  event, values = window.Read()
  if event is None or event == 'Exit':
      break
  print(dir + values.get('_IN_')[0])


if __name__ == '__main__':
    MyGUI().mainloop()`

1 Ответ

0 голосов
/ 06 декабря 2018

Посмотрите на эту демонстрационную программу .

Перетащите свой код в раздел, где написано:

#------------------------ PASTE YOUR MATPLOTLIB CODE HERE ----------------------

Убедитесь, что ваш чертеж находится в переменной'инжир'.Он создаст окно с параметрами графического интерфейса и встроенным в него графиком Matplotlib.

...