wxPython框架没有显示

时间:2015-11-29 20:40:16

标签: python user-interface wxpython

我有以下Python代码,可以为将视频转换为VLC Media Player原生的帧的命令行过程制作GUI。

# -*- coding: utf-8 -*-
from subprocess import call
import wx
import wx.xrc

vidpath = ''
framedir = ''

def VideoToFrame(videopath, targetdirpath):
    "Converts a video into frames. Make sure you have VLC Media Player installed!"
    call('vlc.exe "' + videopath + '" --video-filter=scene --vout=dummy --start-time=300 --stop-time=600 --scene-ratio=250 --scene-path=”' + targetdirpath + '” vlc://quit')


if __name__ == "__main__":

    class MyFrame1 ( wx.Frame ):

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

                self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )

                gbSizer1 = wx.GridBagSizer( 0, 0 )
                gbSizer1.SetFlexibleDirection( wx.BOTH )
                gbSizer1.SetNonFlexibleGrowMode( wx.FLEX_GROWMODE_SPECIFIED )

                gbSizer2 = wx.GridBagSizer( 0, 0 )
                gbSizer2.SetFlexibleDirection( wx.BOTH )
                gbSizer2.SetNonFlexibleGrowMode( wx.FLEX_GROWMODE_SPECIFIED )

                self.VidLabel = wx.StaticText( self, wx.ID_ANY, u"Video path", wx.DefaultPosition, wx.DefaultSize, 0 )
                self.VidLabel.Wrap( -1 )
                gbSizer2.Add( self.VidLabel, wx.GBPosition( 0, 0 ), wx.GBSpan( 1, 1 ), wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 5 )

                self.m_filePicker1 = wx.FilePickerCtrl( self, wx.ID_ANY, wx.EmptyString, u"Select a file", u"*.*", wx.DefaultPosition, wx.DefaultSize, wx.FLP_DEFAULT_STYLE )
                gbSizer2.Add( self.m_filePicker1, wx.GBPosition( 1, 0 ), wx.GBSpan( 1, 1 ), wx.ALL, 5 )


                gbSizer1.Add( gbSizer2, wx.GBPosition( 0, 0 ), wx.GBSpan( 1, 1 ), wx.EXPAND, 5 )

                gbSizer3 = wx.GridBagSizer( 0, 0 )
                gbSizer3.SetFlexibleDirection( wx.BOTH )
                gbSizer3.SetNonFlexibleGrowMode( wx.FLEX_GROWMODE_SPECIFIED )

                self.FrameLabel = wx.StaticText( self, wx.ID_ANY, u"Frame extraction path", wx.DefaultPosition, wx.DefaultSize, 0 )
                self.FrameLabel.Wrap( -1 )
                gbSizer3.Add( self.FrameLabel, wx.GBPosition( 0, 0 ), wx.GBSpan( 1, 1 ), wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 5 )

                self.m_dirPicker1 = wx.DirPickerCtrl( self, wx.ID_ANY, wx.EmptyString, u"Select a folder", wx.DefaultPosition, wx.DefaultSize, wx.DIRP_DEFAULT_STYLE )
                gbSizer3.Add( self.m_dirPicker1, wx.GBPosition( 1, 0 ), wx.GBSpan( 1, 1 ), wx.ALL, 5 )


                gbSizer1.Add( gbSizer3, wx.GBPosition( 0, 1 ), wx.GBSpan( 1, 1 ), wx.EXPAND, 5 )

                bSizer1 = wx.BoxSizer( wx.VERTICAL )

                self.framebutton = wx.Button( self, wx.ID_ANY, u"Extract frames!", wx.DefaultPosition, wx.DefaultSize, 0 )
                bSizer1.Add( self.framebutton, 0, wx.ALL, 5 )


                gbSizer1.Add( bSizer1, wx.GBPosition( 2, 0 ), wx.GBSpan( 1, 1 ), wx.EXPAND, 5 )


                self.SetSizer( gbSizer1 )
                self.Layout()

                self.Centre( wx.BOTH )

                # Connect Events
                self.m_filePicker1.Bind( wx.EVT_FILEPICKER_CHANGED, self.chvidpath )
                self.m_dirPicker1.Bind( wx.EVT_DIRPICKER_CHANGED, self.chframedir )
                self.framebutton.Bind( wx.EVT_BUTTON, self.extractframes )

        def __del__( self ):
                pass


            # Virtual event handlers, overide them in your derived class
        def chvidpath( self, event ):
                vidpath = event.path
                event.Skip()

        def chframedir( self, event ):
                framedir = event.path
                event.Skip()

        def extractframes( self, event ):
                VideoToFrame(vidpath, framedir)
                event.Skip()

不幸的是,当我运行脚本时,我无法管理要显示的帧。 结果是......什么都没有! 请帮忙!我不知道我在做什么,也不知道如何制作命令行流程的GUI。 我是一名优秀的Python玩家。

1 个答案:

答案 0 :(得分:1)

我不知道您在哪里创建了MyFrame1的实例

添加:

app = wx.App()
frame = MyFrame1(None)
frame.Show()
app.MainLoop()