2016-02-10 1 views
0

может кто-нибудь мне помочь? Я создал gui, используя wxformbuilder, для которого был создан код для python. то я создал отдельный код о том, как он должен работать.python просто перезагружается и не запускает программу вообще

этот первый код предназначен только для gui.

# -*- coding: utf-8 -*- 

########################################################################### 
## Python code generated with wxFormBuilder (version Jun 17 2015) 
## http://www.wxformbuilder.org/ 
## 
## PLEASE DO "NOT" EDIT THIS FILE! 
########################################################################### 

import wx 
import wx.xrc 

########################################################################### 
## Class frmQuestions 
########################################################################### 

class frmQuestions (wx.Frame): 

    def __init__(self, parent): 
     wx.Frame.__init__ (self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size(1055,562), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL) 

     self.SetSizeHintsSz(wx.DefaultSize, wx.DefaultSize) 
     self.SetBackgroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_HIGHLIGHT)) 

     bSizer1 = wx.BoxSizer(wx.VERTICAL) 

     self.lblQbox = wx.StaticText(self, wx.ID_ANY, u"Question:", wx.DefaultPosition, wx.DefaultSize, 0) 
     self.lblQbox.Wrap(-1) 
     self.lblQbox.SetFont(wx.Font(18, 73, 93, 90, False, "Brush Script MT")) 

     bSizer1.Add(self.lblQbox, 0, wx.ALL|wx.EXPAND, 5) 

     self.txtQ = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0) 
     bSizer1.Add(self.txtQ, 1, wx.ALL|wx.EXPAND, 5) 

     self.btnNext = wx.Button(self, wx.ID_ANY, u"Next", wx.DefaultPosition, wx.DefaultSize, 0) 
     self.btnNext.SetFont(wx.Font(12, 72, 90, 90, False, "Cooper Black")) 

     bSizer1.Add(self.btnNext, 0, wx.ALL|wx.EXPAND, 5) 

     self.btnShowResults = wx.Button(self, wx.ID_ANY, u"Show Results", wx.DefaultPosition, wx.DefaultSize, 0) 
     self.btnShowResults.SetFont(wx.Font(12, 72, 90, 90, False, "Cooper Black")) 

     bSizer1.Add(self.btnShowResults, 0, wx.ALL|wx.EXPAND, 5) 

     self.btnExit = wx.Button(self, wx.ID_ANY, u"Exit", wx.DefaultPosition, wx.DefaultSize, 0) 
     self.btnExit.SetFont(wx.Font(12, 72, 90, 90, False, "Cooper Black")) 

     bSizer1.Add(self.btnExit, 0, wx.ALL|wx.EXPAND, 5) 


     self.SetSizer(bSizer1) 
     self.Layout() 

     self.Centre(wx.BOTH) 

     # Connect Events 
     self.btnNext.Bind(wx.EVT_BUTTON, self.OnNext) 
     self.btnShowResults.Bind(wx.EVT_BUTTON, self.OnShowResults) 
     self.btnExit.Bind(wx.EVT_BUTTON, self.OnExit) 

    def __del__(self): 
     pass 


    # Virtual event handlers, overide them in your derived class 
    def OnNext(self, event): 
     event.Skip() 

    def OnShowResults(self, event): 
     event.Skip() 

    def OnExit(self, event): 
     event.Skip() 


########################################################################### 
## Class frmResults 
########################################################################### 

class frmResults (wx.Frame): 

    def __init__(self, parent): 
     wx.Frame.__init__ (self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size(500,300), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL) 

     self.SetSizeHintsSz(wx.DefaultSize, wx.DefaultSize) 
     self.SetForegroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_ACTIVECAPTION)) 
     self.SetBackgroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_HIGHLIGHT)) 

     bSizer2 = wx.BoxSizer(wx.VERTICAL) 

     self.txtResults = wx.StaticText(self, wx.ID_ANY, u"Results", wx.DefaultPosition, wx.DefaultSize, 0) 
     self.txtResults.Wrap(-1) 
     self.txtResults.SetFont(wx.Font(12, 72, 90, 90, False, "Cooper Black")) 

     bSizer2.Add(self.txtResults, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 5) 

     self.txtA = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0) 
     bSizer2.Add(self.txtA, 1, wx.ALL|wx.EXPAND, 5) 

     self.txtB = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0) 
     bSizer2.Add(self.txtB, 1, wx.ALL|wx.EXPAND, 5) 

     self.txtC = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0) 
     bSizer2.Add(self.txtC, 1, wx.ALL|wx.EXPAND, 5) 

     self.txtD = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0) 
     bSizer2.Add(self.txtD, 1, wx.ALL|wx.EXPAND, 5) 

     self.btnGoBack = wx.Button(self, wx.ID_ANY, u"Go Back", wx.DefaultPosition, wx.DefaultSize, 0) 
     self.btnGoBack.SetFont(wx.Font(12, 72, 90, 90, False, "Cooper Black")) 

     bSizer2.Add(self.btnGoBack, 0, wx.ALL|wx.EXPAND, 5) 


     self.SetSizer(bSizer2) 
     self.Layout() 

     self.Centre(wx.BOTH) 

     # Connect Events 
     self.btnGoBack.Bind(wx.EVT_BUTTON, self.OnGoBack) 

    def __del__(self): 
     pass 


    # Virtual event handlers, overide them in your derived class 
    def OnGoBack(self, event): 
     event.Skip() 

то вот код, который будет работать на RPI:

from noname import * 
from wx import * 

Q1 = 'Q1' 
Q2 = 'Q2' 
Q3 = 'Q3' 
Q4 = 'Q4' 
Q5 = 'Q5' 
Q6 = 'Q6' 
Q7 = 'Q7' 
Q8 = 'Q8' 
Q9 = 'Q9' 
Q10 = 'Q10' 
Q11 = 'Q11' 
Q12 = 'Q12' 
Q13 = 'Q13' 
Q14 = 'Q14' 
Q15 = 'Q15' 
Q16 = 'Q16' 
Q17 = 'Q17' 
Q18 = 'Q18' 
Q19 = 'Q19' 
Q20 = 'Q20' 



class Questions(frmQuestions): 
    x = 0 
    def __init__(self, parent): 
     frmQuestions.__init__(self,parent) 
     self.txtQ.SetLabel('') 

    def OnNext(self, event): 
     self.x = self.x + 1 
     if (self.x==1): 
      self.txtQ.SetLabel(Q1) 
     elif (self.x==2): 
      self.txtQ.SetLabel(Q2) 
     elif (self.x==3): 
      self.txtQ.SetLabel(Q3) 
     elif (self.x==4): 
      self.txtQ.SetLabel(Q4) 
     elif (self.x==5): 
      self.txtQ.SetLabel(Q5) 
     elif (self.x==6): 
      self.txtQ.SetLabel(Q6) 
     elif (self.x==7): 
      self.txtQ.SetLabel(Q7) 
     elif (self.x==8): 
      self.txtQ.SetLabel(Q8) 
     elif (self.x==9): 
      self.txtQ.SetLabel(Q9) 
     elif (self.x==10): 
      self.txtQ.SetLabel(Q10) 
     elif (self.x==11): 
      self.txtQ.SetLabel(Q11) 
     elif (self.x==12): 
      self.txtQ.SetLabel(Q12) 
     elif (self.x==13): 
      self.txtQ.SetLabel(Q13) 
     elif (self.x==14): 
      self.txtQ.SetLabel(Q14) 
     elif (self.x==15): 
      self.txtQ.SetLabel(Q15) 
     elif (self.x==16): 
      self.txtQ.SetLabel(Q16) 
     elif (self.x==17): 
      self.txtQ.SetLabel(Q17) 
     elif (self.x==18): 
      self.txtQ.SetLabel(Q18) 
     elif (self.x==19): 
      self.txtQ.SetLabel(Q19) 
     elif (self.x==20): 
      self.txtQ.SetLabel(Q20) 
     else: 
      pass 
     print self.x 

    def OnShowResults(self, event): 
     results.Show() 

    def OnExit(self, event): 
     self.Destroy() 



class Results(frmResults): 
    def __init__(self, parent): 
     frmResults.__init__(self,parent) 

    def OnGoBack(self, event): 
     self.txtA.SetLabel('') 
     self.txtB.SetLabel('') 
     self.txtC.SetLabel('') 
     self.txtD.SetLabel('') 
     self.Hide() 


app = wx.App(False) 
results = Results(None) 
questions = Questions(None) 
questions.Show() 


app.MainLoop() 

каждый раз, когда я запустить его на RPI. оболочка python всегда отображается ------------------------------- restart ------------- ------------, и gui вообще не появляется. Я просто хочу знать, в чем проблема с кодом.

, а также я создал код на окнах, и я скопировал оба файла python на rpi. на окнах он работает правильно. Я искренне благодарю вас за ваш hep im только студент и новичок, поэтому я не могу на самом деле указать, что не так с моим кодом. спасибо :)))

ответ

0

Вы управляете этим через ./myscript.py? Если это так, вам нужно добавить интерпретатор в начало. Первая строка должна быть:

#!/usr/bin/env python 

или что-то подобное, чтобы он знал, какой интерпретатор использовать.

Я знаю, что это не вопрос, но я больше обеспокоен вашей реальной программой, если честно. Например, вместо того, чтобы писать несколько последовательных QN = "QN", вы можете создать их все как dict и обновить глобальные переменные. Например:

tmp = ["Q{}".format(i+1) for i in range(20)] 
globals().update(dict(zip(tmp, tmp))) 

Это значительно проще. Или, еще лучше, вы можете сопоставить числа с вашими желаемыми строками в форме dict, поэтому всю вещь можно переписать как:

#!/usr/bin/env python 
from noname import * 
from wx import * 

tmp = ["Q{}".format(i+1) for i in range(20)] # Create a list of "Q1"..."Q20" 
vars = dict(enumerate(tmp, 1)) # { 1 : "Q1", 2 : "Q2", ... 20 : "Q20" } 

class Questions(frmQuestions): 
    def __init__(self, parent): 
     self.x = 0 # Made this an instance variable 
     frmQuestions.__init__(self,parent) 
     self.txtQ.SetLabel('') 

    def OnNext(self, event): 
     self.x = self.x + 1 
     if self.x in vars: 
      self.txtQ.SetLabel(vars[self.x]) # significantly simplified 
     print(self.x) 

    def OnShowResults(self, event): 
     results.show() 

    def OnExit(self, event): 
     self.Destroy() 

class Results(frmResults): 
    def __init__(self, parent): 
     frmResults.__init__(self,parent) 

    def OnGoBack(self, event): 
     for _ in [self.txtA, self.txtB, self.txtC, self.txtD]: 
      _.SetLabel('') 
     self.Hide() 

app = wx.App(False) 
results = Results(None) 
questions = Questions(None) 
questions.Show() 


app.MainLoop()