Das folgende Programm öffnet eine zweispaltige Datei und zeichnet eine Spalte als Funktion der anderen auf. Das Problem besteht darin, dass die tkinter-Widgets inaktiv sind, solange das Diagrammfenster geöffnet ist. Sie werden wieder aktiv, wenn das Diagrammfenster geschlossen wird. Ich möchte die Widgets aktiv halten. Wenn ich also eine andere Datei wähle, muss ich das Diagrammfenster nicht schließen. Wie kann das gemacht werden? Ich habe versucht, z.B. top.after(10, openfile)
zu verwenden, aber das Programm fordert den Benutzer erwartungsgemäß auf, alle 10 ms eine neue Datei auszuwählen.Keeping tkinter panel aktiv, wenn das Plot geöffnet ist
import tkinter as Tk
from tkinter.filedialog import askopenfilename
import matplotlib.pyplot as plt
top = Tk.Tk()
file_name = Tk.StringVar()
f = []
m = []
def openfile():
global opfi
opfi = askopenfilename()
def plot():
global opfi
del f[:], m[:]
with open(opfi, 'r') as file:
for line in range(6000):
g = file.readline().split('\t')
field = str(g[0])
magn = str(g[1])
f.append(eval(field))
m.append(eval(magn))
plt.close()
plt.plot(f, m, 'b')
plt.show()
b1 = Tk.Button(top, text='Sample', command=openfile, width=10)
b1.place(relx=0.0, rely=0.0)
b3 = Tk.Button(top, text='Plot', command=plot, width=6)
b3.place(relx=0.4, rely=0.0)
Tk.mainloop()
Und das ist eine Beispieldatei mit denen ich arbeite:
.983983186936 -0.702925299281
1.00236660232 -0.726670144435
1.02074058078 -0.75169698959
1.03909297815 -0.777209834745
1.05744133036 -0.801262179899
1.0757541608 -0.826426525054
1.09406204943 -0.852315870209
1.11235780038 -0.876239715363
1.13063106929 -0.900676560518
1.14890298837 -0.926342905673
'nach' wird nicht funktionieren, weil' plt.show() 'blockiert Programm und' mainloop() 'kann' nach() 'nicht ausführen. Wie ich weiß, wurde 'plt.show()' nur zum schnellen Anzeigen von Bildern erstellt - d. zum Debuggen von Code. Wenn Sie Kontrolle haben wollen, können Sie [plot in tk window] einbetten (https://matplotlib.org/examples/user_interfaces/embedding_in_tk.html). – furas
@Nae Ich habe gerade meine Frage bearbeitet – DenGor
@Nae hinzugefügt eine andere Bearbeitung – DenGor