0

誰でもこれで私を助けることができますか?Pythonコードを生成するwxformbuilderを使用してGUIを作成しました。次に、それがどのように機能するかについて別のコードを作成しました。

この最初のコードは 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シェルは常に表示されます ---------------------------再起動------------- ------------ そして gui はまったく表示されません。コードの何が問題なのか知りたいだけです。

また、Windowsでコードを作成し、両方のpythonファイルをrpiにコピーしました。Windowsでは正常に動作します。私はただの学生で初心者なので、私のコードの何が問題なのかを本当に指摘することはできません。ありがとう :)))

4

1 に答える 1

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()
于 2016-02-10T06:44:44.950 に答える