Я новичок в Python и wxPython. Я пытаюсь смоделировать частицы в коробке со случайными скоростями в случайных направлениях. Я создал простой графический интерфейс в wxFormBuilder, где у меня есть панель для отображения графика частиц. Частицы устанавливаются в положение и отображаются на панели, затем я запускаю симуляцию и обновляю координаты частиц по осям x и y. При перерисовке позиций оси кажутся «толще», как и раньше, похоже, что несколько осей расположены друг над другом.
Я ничего не могу найти об этой проблеме, я надеюсь, что кто-нибудь может мне помочь с этим?
Это код, который создает Plot:
import wx
import particles
import random
import matplotlib
matplotlib.use('WXAgg')
from matplotlib.figure import Figure
from matplotlib.backends.backend_wxagg import \
FigureCanvasWxAgg as FigCanvas, \
NavigationToolbar2WxAgg as NavigationToolbar
matplotlib.rcParams.update({'font.size': 8})
class MyFrameSub( particles.GUI_MainFrame ):
def __init__( self, parent ):
particles.GUI_MainFrame.__init__( self, parent )
def InitData(self):
self.npart = int(self.m_npart.GetValue())
self.nsteps = int(self.m_steps.GetValue())
self.ndt = float(self.m_dt.GetValue())
self.x= [random.random() for I in range(self.npart)]
self.y= [2*random.random()-1 for I in range(self.npart)]
self.vx= [self.ndt*(2*random.random()-1) for I in range(self.npart)]
self.vy= [self.ndt*(2*random.random()-1) for I in range(self.npart)]
return
def CreatePlot(self):
panelsize = self.m_PlotPanel.GetClientSize()
self.figure = Figure(figsize=(panelsize[0]/100.0,panelsize[1]/100.0), dpi=100, frameon=False)
self.canvas = FigCanvas(self.m_PlotPanel, wx.ID_ANY, self.figure)
self.axes = self.figure.add_subplot(111)
self.axes.axis((-1,1,-1,1))
self.partplot, = self.axes.plot(self.x, self.y, 'ro')
self.canvas.draw()
return
def UpdateData(self):
for i in range(self.nsteps):
for j in range(self.npart):
self.x[j]=self.x[j]+self.vx[j]
self.y[j]=self.y[j]+self.vy[j]
if abs(self.x[j])>1:
self.vx[j]=-self.vx[j]
if abs(self.y[j])>1:
self.vy[j]=-self.vy[j]
self.partplot.set_xdata(self.x)
self.partplot.set_ydata(self.y)
self.canvas.draw()
return
за которыми следуют определения кнопок, это выглядит так: Перед запуском моделирования: www.merlinvs.de/before. jpg
и после запуска моделирования: www.merlinvs.de/after.jpg
Как видите, топоры стали уродливыми, и я понятия не имею, почему.
Еще один вопрос, о котором я думал, заключается в следующем: когда я запускаю цикл, который занимает некоторое время, пользовательский интерфейс не отвечает, возможно ли активировать пользовательский интерфейс для отмены цикла, если это необходимо?