У меня есть несколько учеников, которые учатся vpython для науки. Они хотели бы использовать радиокнопку для изменения формы. Однако я не мог понять, почему форма не меняется нормально (она перекрывается), но это может быть потому, что я ужасен при редактировании кода других людей. Кто-нибудь видит проблему? Спасибо! (да, я знаю, что они начали с базы примера виджета, но это было просто попробовать кодировать этот сценарий).Радио кнопки для изменения отображаемой формы
from __future__ import division, print_function
from visual import *
from visual.graph import *
from physutil import *
import wx
def setleft(evt): # this will be used to rotate the box left
cube.dir = -1
def setright(evt): # this will be used to rotate the box right
cube.dir = 1
def cuberate(value): # this creates a function to call upon later
cube.dtheta = 2*value*pi/1e4
def setrate(evt): # this will be used to create a slider for user control
value = rotation.GetValue()
cuberate(value) # value is min-max slider position, 0 to 100
def togglecolor(evt): # this is how you set up radio buttons
choice = t1.GetSelection()
if choice == 0: # upper radio button (choice = 0)
currentobject.color = color.red
else: # lower radio button (choice = 1)
currentobject.color = color.cyan
L = 320
Hgraph=400
w = window(width=2*(L+window.dwidth),
height=L+window.dheight+window.menuheight+Hgraph,
menus=True, title='Widgets',
style=wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX)
d = 20
disp = display(window=w, x=d, y=d, width=L-2*d, height=L-2*d,
forward=-vector(0,1,2))
gdisplay(window=w, y=disp.height+50, width=2*(L+window.dwidth),
height=Hgraph)
cube = box(color=color.red)
currentobject = cube
def choose(evt):
selected=t2.GetSelection()
cube.visible=false
if selected ==0:
cube = box(color=color.red)
elif selected ==1:
cube = cylinder(radius=0.5, color=color.red)
elif selected ==2:
cube = sphere(radius=0.5, color=color.red)
cube.visible=true
p = w.panel
wx.StaticText(p, pos=(d,4), size=(L-2*d,d), label='A Sample',
style=wx.ALIGN_CENTRE | wx.ST_NO_AUTORESIZE)
left = wx.Button(p, label='Rotate left', pos=(L+10,15))
left.Bind(wx.EVT_BUTTON, setleft)
right = wx.Button(p, label='Rotate right', pos=(1.5*L+10,15))
right.Bind(wx.EVT_BUTTON, setright)
t1 = wx.RadioBox(p, pos=(1.0*L,0.3*L), size=(0.25*L, 0.25*L),
choices = ['Red', 'Cyan'], style=wx.RA_SPECIFY_ROWS)
t1.Bind(wx.EVT_RADIOBOX, togglecolor)
t2 = wx.RadioBox(p, pos=(1.5*L,0.3*L), size=(0.25*L, 0.25*L),
choices = ['Cube', 'Cylinder', 'Sphere'],
style=wx.RA_SPECIFY_ROWS)
t2.Bind(wx.EVT_RADIOBOX, choose)
rotation = wx.Slider(p, pos=(1.0*L,0.8*L), size=(0.9*L,20), minValue=0,
maxValue=100, style=wx.SL_HORIZONTAL|wx.SL_LABELS)
rotation.Bind(wx.EVT_SCROLL, setrate)
wx.StaticText(p, pos=(1.0*L,0.75*L), label='Set Angular Velocty Value')
rotation.SetValue(70) # update the slider
cuberate(rotation.GetValue())
cube.dir = -1
while True:
rate(100)
cube.rotate(axis=(0,1,0), angle=cube.dir*cube.dtheta)
Добро пожаловать в переполнение стека. Если вы согласитесь с этими рекомендациями, люди помогут ответить на ваши вопросы: http://stackoverflow.com/help/how-to-ask. В настоящее время ваш вопрос содержит панель кода и спрашивает, почему она не работает, что, как вы может представить, это сложное задание без вашей помощи, рассказывая нам, где искать, что вы пробовали, и какие ошибки вы получаете (если таковые имеются) – Mikkel