Ich möchte etwas in Python schreiben, um eine GUI zu erstellen, die Folgendes zeigt: i) Eine Liste von Kontrollkästchen ii) Ein Diagramm (der Daten, die den aktivierten Kontrollkästchen entsprechen) - vorzugsweise beides in einem einzigen Fenster, aber es ist in Ordnung, wenn sie müssen sich in separaten Fenstern befinden. Die Daten, die grafisch dargestellt werden sollen, stammen aus einer .txt-Datei und die Kontrollkästchen steuern, welche Teile der Textdatei angezeigt/ausgeblendet werden sollen.
Welche Python-Bibliothek würde dafür am besten funktionieren (auf der Suche nach Benutzerfreundlichkeit, kostenlos und der Fähigkeit, die grundlegenden Anforderungen zu erfüllen)? Die Hauptanforderung besteht darin, dass ein Benutzer jede beliebige Kombination der Daten in der Grafik betrachten kann, sodass das Diagramm aktualisiert wird, wenn der Benutzer auf die Kontrollkästchen klickt.
Nachdem ich mir einen Stackoverflow-Thread angesehen hatte (den Link verloren und ihn nicht wiederfinden kann, tut mir leid), schien es, als ob PyQt + Matplotlib eine gute Option sein könnte, aber ich wollte mich beraten lassen, ob das für mich gut funktionieren würde, bevor ich anfange verbringen zu viel Zeit mit ihnen. Ich bin mir auch nicht sicher, wie ich ein Diagramm + eine Tabelle in einem Fenster kombinieren würde. Ich bin neu im Kombinieren von Bibliotheken.
Ich würde auch vorschlagen, einen Blick auf wxPython zu werfen , das die Python-Bindungen für wxWigets sind.
Ein sehr schneller Hack des Codes aus dem obigen Link ergibt:
#!/usr/bin/env python
"""
An example of how to use wx or wxagg in an application with the new
toolbar - comment out the setA_toolbar line for no toolbar
"""
# Used to guarantee to use at least Wx2.8
import wxversion
wxversion.ensureMinimal('2.8')
from numpy import arange, sin, pi
import matplotlib
# uncomment the following to use wx rather than wxagg
#matplotlib.use('WX')
#from matplotlib.backends.backend_wx import FigureCanvasWx as FigureCanvas
# comment out the following to use wx rather than wxagg
matplotlib.use('WXAgg')
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
from matplotlib.backends.backend_wx import NavigationToolbar2Wx
from matplotlib.figure import Figure
import wx
class CanvasFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self,None,-1,
'CanvasFrame',size=(550,350))
self.SetBackgroundColour(wx.NamedColour("WHITE"))
self.figure = Figure()
self.axes = self.figure.add_subplot(111)
t = arange(0.0,3.0,0.01)
s = sin(2*pi*t)
self.axes.plot(t,s)
self.canvas = FigureCanvas(self, -1, self.figure)
sampleList = ['zero', 'one', 'two', 'three', 'four', 'five',
'six', 'seven', 'eight', 'nine', 'ten', 'eleven',
'twelve', 'thirteen', 'fourteen']
lb = wx.CheckListBox(self, -1, (80, 50), wx.DefaultSize, sampleList)
# You will need to add some event handlers
#self.Bind(wx.EVT_LISTBOX, self.EvtListBox, lb)
#self.Bind(wx.EVT_CHECKLISTBOX, self.EvtCheckListBox, lb)
lb.SetSelection(0)
self.listbox = lb
self.sizer = wx.BoxSizer(wx.VERTICAL)
self.sizer.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.GROW)
self.sizer.Add(self.listbox, 0, wx.RIGHT | wx.TOP)
self.SetSizer(self.sizer)
self.Fit()
self.add_toolbar() # comment this out for no toolbar
def add_toolbar(self):
self.toolbar = NavigationToolbar2Wx(self.canvas)
self.toolbar.Realize()
if wx.Platform == '__WXMAC__':
# Mac platform (OSX 10.3, MacPython) does not seem to cope with
# having a toolbar in a sizer. This work-around gets the buttons
# back, but at the expense of having the toolbar at the top
self.SetToolBar(self.toolbar)
else:
# On Windows platform, default window size is incorrect, so set
# toolbar width to figure width.
tw, th = self.toolbar.GetSizeTuple()
fw, fh = self.canvas.GetSizeTuple()
# By adding toolbar in sizer, we are able to put it at the bottom
# of the frame - so appearance is closer to GTK version.
# As noted above, doesn't work for Mac.
self.toolbar.SetSize(wx.Size(fw, th))
self.sizer.Add(self.toolbar, 0, wx.LEFT | wx.EXPAND)
# update the axes menu on the toolbar
self.toolbar.update()
def OnPaint(self, event):
self.canvas.draw()
class App(wx.App):
def OnInit(self):
'Create the main window and insert the custom frame'
frame = CanvasFrame()
frame.Show(True)
return True
app = App(0)
app.MainLoop()
PySimpleGUI ist ein neues Paket, das tkinter umschließt, das Matplotlib-Graphen unterstützt. Es ist ideal für Programme, die Zugriff auf die grundlegenden GUI-Widgets wie Kontrollkästchen, Optionsfelder, Listenfelder usw. benötigen, aber kein vollständiges GUI-Framework wie Qt benötigen. Manchmal gibt es einen Bedarf für etwas zwischen einfachem Starten und Qt, und dies kann eine Antwort auf diesen Bedarf sein.
Es gibt einige Demo-Programme im GitHub, die zeigen, wie man Matplotlib integriert, um Diagramme anzuzeigen. Damit sollten Sie in der Lage sein, ein Programm zu schreiben, das die darzustellenden Daten mit GUI-Widgets sammelt, mit Matplotlib oder Pyplot ein Diagramm erstellt, das dann angezeigt werden kann.
PyQt und matplotlib. Die PyQt-Bibliothek ist sehr robust und sehr vielfältig. Ich habe es verwendet, um eine Anwendung zu erstellen, die Ihrem Vorhaben sehr ähnlich ist. Es braucht ein wenig Mühe, um über das anfängliche Verständnis hinauszukommen, wie man GUI-Apps mit Python und PyQt erstellt. Ein solides Verständnis der objektorientierten Programmierung ist ein Muss. Viel Glück.
rwicks