0

ですから、テキストファイルからフレームにテキストをロードする方法を知っている人はいないかと思いました。私のアプリケーションは、Drum NotationとNotationに一致するDrumサウンドファイルをロードし、これらを一緒にロードします。ここで、表記を説明するテキストをロードする必要があります。テキストを画像とサウンドファイルと一緒にロードする必要があります。

def loadImage(self, event):
        self.image_file = self.images.next()
        print(self.image_file)
        image_file = os.path.join(IMAGE_DIR, self.image_file)
        img = wx.Image(image_file, wx.BITMAP_TYPE_ANY)
        width = img.GetWidth()
        height = img.GetHeight()
        self.imageCtrl.SetBitmap(wx.BitmapFromImage(img))

これは、画像をロードするコードです。また、各画像と音声ファイルを循環することもできます。

とにかく、誰かがテキストをロードするためにコードに追加する方法がありますか?

def loadImage(self, event):
self.image_file = self.images.next()
print(self.image_file)
image_file = os.path.join(IMAGE_DIR, self.image_file)
img = wx.Image(image_file, wx.BITMAP_TYPE_ANY)
width = img.GetWidth()
height = img.GetHeight()
self.imageCtrl.SetBitmap(wx.BitmapFromImage(img))



def previousPicture(self, event):
    self.image_file = self.images.prev() 
    print(self.image_file)
    image_file = os.path.join(IMAGE_DIR, self.image_file)
    img = wx.Image(image_file, wx.BITMAP_TYPE_ANY)
    img = img.Scale(680,143)
    self.imageCtrl.SetBitmap(wx.BitmapFromImage(img))

 def onPlaySound (self, event):
    sound_file, ext = os.path.splitext(self.image_file)
    sound_file = os.path.join(SOUND_DIR, sound_file + '.wav')
    print(sound_file)
    sound = wx.Sound(sound_file)
    sound.Play(wx.SOUND_ASYNC)

class DIter:
#"Iterable with next and previous"
 def __init__(self, ItemList):
    #"Creator"
    self.ItemList = ItemList
    self.Index = -1
    self.ListEnd = len(ItemList)

 def next(self):
     # """ Return the next item """
    self.Index += 1
    self.Index %= self.ListEnd # or to avoid wrapping self.Index = min([self.Index,   self.ListEnd-1])
    return self.ItemList[self.Index]

 def prev(self):
      #""" Return the previous item """
    self.Index -= 1
    if self.Index < 0:
        self.Index = self.ListEnd-1 # or to avoid wrapping self.Index = 0
    return self.ItemList[self.Index]
4

1 に答える 1

1

おそらくwx.TE_MULTILINEフラグを使用してwx.TextCtrlを追加し、テキストで更新します。テキストを変数に読み込んでから、SetValue()メソッドを使用してTextCtrlの値を設定します。

wxPythonのWebサイトからダウンロードできるwxPythonデモの例があります。

この種の動作の例を次に示します。

    import glob
import wx

########################################################################
class MainPanel(wx.Panel):
    """"""

    #----------------------------------------------------------------------
    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent)
        self.textFiles = glob.glob(r'C:\Users\mdriscoll\Documents\wx_testing\*.txt')
        self.currentFile = -1
        self.totalFiles = len(self.textFiles)

        mainSizer = wx.BoxSizer(wx.VERTICAL)
        btnSizer = wx.BoxSizer(wx.HORIZONTAL)

        self.txt = wx.TextCtrl(self, style=wx.TE_MULTILINE)
        prevBtn = wx.Button(self, label="Prev")
        prevBtn.Bind(wx.EVT_BUTTON, self.onPrev)
        nextBtn = wx.Button(self, label="Next")
        nextBtn.Bind(wx.EVT_BUTTON, self.onNext)

        btnSizer.Add(prevBtn, 0, wx.ALL|wx.CENTER, 5)
        btnSizer.Add(nextBtn, 0, wx.ALL|wx.CENTER, 5)
        mainSizer.Add(self.txt, 1, wx.ALL|wx.EXPAND, 5)
        mainSizer.Add(btnSizer)

        self.SetSizer(mainSizer)

    #----------------------------------------------------------------------
    def onPrev(self, event):
        """"""
        print self.currentFile
        if self.currentFile != -1:
            if self.currentFile == self.totalFiles:
                # need to subtract one to get the last element in the list
                self.currentFile -= 1
                fpath = self.textFiles[self.currentFile]
            else:
                fpath = self.textFiles[self.currentFile]

            # read file
            with open(fpath) as fh:
                data = fh.read()

            self.txt.SetValue(data)
            self.currentFile -= 1
        else:
            return

    #----------------------------------------------------------------------
    def onNext(self, event):
        """"""
        print self.currentFile
        if self.currentFile == -1:
            self.currentFile += 1

        if self.currentFile != self.totalFiles:
            fpath = self.textFiles[self.currentFile]
            # read file
            with open(fpath) as fh:
                data = fh.read()

            self.txt.SetValue(data)
            self.currentFile += 1
        else:
            return



########################################################################
class MainFrame(wx.Frame):
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title="File reader")
        panel = MainPanel(self)
        self.Show()

if __name__ == "__main__":
    app = wx.App(False)
    frame = MainFrame()
    app.MainLoop()

それはとにかくあなたに一般的な考えを与えるはずです

于 2013-03-13T20:02:58.080 に答える