4

GUI アプリを作成するために wxPython を学び始めていますが、いくつかの問題に直面しています: wx.DirDialog を使用してフォルダーを選択すると、選択したフォルダーに関係なく、dlg.GetPath() は常に同じフォルダーを返します。私の場合: /home/loai

私のバインディング関数は次のとおりです。それは簡単です:

def onButton(self,e):
    dlg = wx.DirDialog(self, "Choose a directory:")
    if dlg.ShowModal() == wx.ID_OK:
        print "You chose %s" % dlg.GetPath()
    dlg.Destroy()

これは常に出力されます:You selected /home/loai

ありがとう

4

4 に答える 4

6

どのOSを使用していますか?どのパイソン?どのwxPython? これは、私のチュートリアルの 1 つのコードによく似ており、うまく機能しました。私は先に進み、実際にそのチュートリアルから簡素化された実行可能な例を書きました:

import os
import wx


########################################################################
class MyForm(wx.Frame):

    #----------------------------------------------------------------------
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY,
                          "File and Folder Dialogs Tutorial")
        panel = wx.Panel(self, wx.ID_ANY)
        self.currentDirectory = os.getcwd()

        dirDlgBtn = wx.Button(panel, label="Show DirDialog")
        dirDlgBtn.Bind(wx.EVT_BUTTON, self.onDir)

    #----------------------------------------------------------------------
    def onDir(self, event):
        """
        Show the DirDialog and print the user's choice to stdout
        """
        dlg = wx.DirDialog(self, "Choose a directory:",
                           style=wx.DD_DEFAULT_STYLE
                           #| wx.DD_DIR_MUST_EXIST
                           #| wx.DD_CHANGE_DIR
                           )
        if dlg.ShowModal() == wx.ID_OK:
            print "You chose %s" % dlg.GetPath()
        dlg.Destroy()

#----------------------------------------------------------------------
# Run the program
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyForm()
    frame.Show()
    app.MainLoop()

このコードは、Python 2.6.6 と wxPython 2.8.12.1 を使用して Windows 7 で実行しました。3 つの異なるディレクトリを選択すると、3 つの異なるパスがすべて出力されました。

于 2012-12-19T19:38:08.040 に答える
3

私自身のコードと上記のコードでも同じ問題が発生しました。しかし、私はそれを回避する方法があることを発見しました。DirDialogを使用するときは、実際に開きたいディレクトリに移動しないでください。代わりに、開きたいディレクトリを強調表示して、[開く]をクリックします。

Ubuntu 12.10、Python 2.7.3、およびwxPython 2.8.12.1(および2.9)では、ディレクトリに移動して[開く]ボタンをクリックすると、ホームディレクトリが表示されます。1つのディレクトリを上に移動し、目的のディレクトリを強調表示して、[開く]ボタンをクリックすると、正しい結果が得られます。

Python2.7.3でubuntu11.10を実行している別のマシンがありますが、この問題が発生したことを覚えていません。

明らかに、この回避策は適切な解決策ではありませんが、これまでに思いついたのはそれだけです。お役に立てば幸いです。

于 2012-12-28T10:27:10.230 に答える
0

これを試して:

dialog = wx.DirDialog(None, "必要なバージョンのデスクトップ ディレクトリに移動します。", "~/", 0, (10, 10), wx.Size(400, 300)) dialog.CentreOnParent()

    # Update directory with path selected in dialog
    if dialog.ShowModal() == wx.ID_OK:
        self.dir_path = dialog.GetPath()
        self.updateDirectory()

それは私のために働いた:D

于 2013-04-23T14:41:32.287 に答える