В настоящее время я застрял в решающей точке программы - мы создали графический интерфейс, который позволяет пользователю выбирать, какую модель популяции они хотят использовать, а затем позволяет им вводить значения в вводах. Теперь я хочу, чтобы эти значения были повторно использованы в следующей функции. Вот как я представляю, как это должно работать.Значения повторного использования, введенные в GUI Tkinter для дальнейшего программирования
Если был выбран х:
- сделать это с помощью введенных значений
- нарисовать этот граф
Вот фактический код для графического интерфейса:
from tkinter import *
from math import *
class GUI:
def __init__(self):
self.root = Tk()
self.labelVariable = StringVar()
self.root.title('Projet informatique')
self.initialize()
self.root.mainloop()
def initialize(self):
self.main = Frame(self.root)
self.main.pack()
label = Label(self.main, textvariable=self.labelVariable, font=('courier',10,'bold'), anchor="w", fg="red", bg="white")
label.pack()
self.labelVariable.set(u"Modélisation de populations atteintes d'un virus")
v=Listbox(self.main)
v.insert("end","Modèle SIR")
v.insert("end", "Modèle de Witowski")
v.insert("end", "Modèle de Munz")
v.insert("end", "Modèle avec traitement")
v.bind("<Double-Button-1>", self.Double)
v.pack(expand=1,fill=BOTH)
def Double(self,event):
widget = event.widget
selection = widget.curselection()
value = widget.get(selection[0])
self.newWindow(value)
def ModifyTextarea(self,elem,msg,clear=None):
elem.config(state=NORMAL)
if clear:
elem.delete(1.0, END)
else:
elem.insert(END,msg)
elem.config(state=DISABLED)
def newWindow(self,msg):
top = Toplevel(self.root)
q1 = Frame(top)
q1.pack()
top.grab_set()
text = Text(q1,state=DISABLED,exportselection=True)
text.pack()
lbl = Label(q1,text="")
lbl.pack()
self.ModifyTextarea(text,msg)
e1=Entry(q1)
label1 = Label(self.main, textvariable="Taux de mortalité des zombies")
e2=Entry(q1)
e3=Entry(q1)
e4=Entry(q1)
e5=Entry(q1)
label1.pack()
e1.pack()
e2.pack()
e3.pack()
e4.pack()
e5.pack()
e1.insert(10,"Taux de mortalité des zombies")
e2.insert(10,"Coefficient de propagation du virus")
e3.insert(10,"Taux de rémission")
e4.insert(10,"Taux d'infectés devenant malades")
e5.insert(10,"Taux de guérison")
btnquit = Button(q1,borderwidth = 1,text = "Ok",command =lambda: top.destroy())
btnquit.pack()
if __name__ == "__main__":
app = GUI()
Вот проблема lems:
- Я понятия не имею, как получить значение того, что было выбрано в списке, для повторного использования для «если».
- Я действительно не знаю, как получить его числовые значения того, что было помещено в поля ввода. Я действительно понимаю, что мне нужно использовать .get, но я получаю его только для его распечатки, а не для использования в дальнейших функциях.
- Это не так важно, но я попытался помещать метки рядом с виджетами записи, но они не отображаются. Любые идеи почему?
Просто чтобы дать вам представление о том, какие функции следует GUI:
import numpy as np
import matplotlib.pyplot as plt
def zombies(a,b,ze,d,c,T,N,dt) :
n = T/dt
n=int(n)
t=np.zeros((n+1))
for i in range (0,n):
t[0]=0
t[i+1]=t[i]+dt
s = np.zeros((n+1))
e = np.zeros((n+1))
z = np.zeros((n+1))
r = np.zeros((n+1))
s[0] = N
z[0] =1
r[0] = 0
for i in range (n-1):
s[i+1] = s[i]+dt*(-b*s[i]*z[i]-d*s[i]+c*z[i])
e[i+1]= e[i]+dt*(b*s[i]*z[i]-ze*e[i]-d*e[i])
z[i+1] = z[i]+dt*(-a*s[i]*z[i]+ze*e[i]-c*z[i])
r[i+1] = r[i]+dt*(a*s[i]*z[i]+d*s[i]+d*e[i])
if s[i+1]<0 or s[i+1] >N:
s[i+1]=0
break
if e[i+1] > N or e[i+1] < 0:
e[i+1]=0
break
if z[i+1] > N or z[i+1] < 0:
z[i+1]=0
break
if r[i+1] <0 or r[i+1] >N:
break
return (t,s,r,z,e,i+2)
После того, как вы выясните, как получить значения из графического интерфейса, вы можете вызывать функции для последующей обработки, сначала импортируя скрипт, в котором они находятся, то есть «import othermodule», а затем называя их с помощью 'othermodule.zombies (.. arguments-from-gui ...)'. Этот вызов может быть выполнен, когда будет нажата новая кнопка, которую вы должны добавить в свой графический интерфейс. – martineau