【问题标题】:Can I use Tkinter (or some other GUI library) to select files and folders at the same time?我可以使用 Tkinter(或其他一些 GUI 库)同时选择文件和文件夹吗?
【发布时间】:2012-10-27 21:09:03
【问题描述】:

我正在使用Tkinter 在 Python 中编写一个简单的文件传输程序,我希望能够同时选择文件和文件夹。

据我所知,我只能做一个或另一个,使用:

tkinter.filedialog.askopenfilenames()tkinter.filedialog.askdirectory()

是否有任何库可以让我同时选择文件和文件夹?

最好,我希望它返回当前目录中文件的文件名列表,以及目录中文件的路径。类似于:

["file1.f", "dir1/file2.f", "dir1/dir2/file3.f"] etc.

【问题讨论】:

    标签: user-interface python-3.x tkinter


    【解决方案1】:

    看起来没有任何主要的 Python 图形用户界面库支持这个

    • PySide/PyQt
    • wxWidgets
    • pyGTK

    我附上了一个可以做你想做的事情的黑客。

    按钮在选择文件和选择目录之间切换......这不是最好的用户体验,但它有效吗?您可能能够获得与其他框架类似的东西,但我对它们不像对 PyQT/PySide 那样熟悉。如果您(出于某种原因)更喜欢 PyQt 而不是 PySide,这也应该在 PyQt 中工作。

    import sys
    from PySide.QtGui import QFileDialog, QApplication, QWidget, QMainWindow, QPushButton, QVBoxLayout, QHBoxLayout
    
    app = QApplication(sys.argv)
    win = QMainWindow()
    main_layout = QVBoxLayout()
    buttons = QHBoxLayout()
    main_layout.addLayout(buttons)
    
    
    def set_directories():
        filedialog.setFileMode(QFileDialog.Directory)
    
    def set_files():
        filedialog.setFileMode(QFileDialog.AnyFile)
    
    def on_file_selected(file):
        print(file)
    
    set_files_btn = QPushButton("File")
    set_files_btn.clicked.connect(set_files)
    set_dirs_btn = QPushButton("Directory")
    set_dirs_btn.clicked.connect(set_directories)
    
    buttons.addWidget(set_files_btn)
    buttons.addWidget(set_dirs_btn)
    
    filedialog = QFileDialog()
    main_layout.addWidget(filedialog)
    
    
    filedialog.fileSelected.connect(on_file_selected)
    filedialog.finished.connect(app.exit)
    win.setCentralWidget(QWidget(win))
    win.centralWidget().setLayout(main_layout)
    
    win.show()
    app.exec_()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-23
      • 2023-03-22
      • 1970-01-01
      • 2018-12-28
      • 1970-01-01
      • 2018-12-17
      • 2020-12-04
      • 1970-01-01
      相关资源
      最近更新 更多