引言
在这篇博客中,我将介绍如何使用python的wxpython库开发一个gui应用程序,该应用程序可以选择文件夹中的.lnk(快捷方式)文件,并将选中的文件导出为特定格式的buttons.ini配置文件。这个工具非常适合用来快速生成配置文件,其中包含用户选择的快捷方式,并为每个快捷方式设置特定的属性。
c:\pythoncode\new\lnktoconfig.py
全部代码
import wx
import os
import win32com.client
class lnkfileselector(wx.frame):
    def __init__(self, *args, **kw):
        super(lnkfileselector, self).__init__(*args, **kw)
        self.initui()
        self.lnk_files = []
        self.selected_files = []
    def initui(self):
        panel = wx.panel(self)
        vbox = wx.boxsizer(wx.vertical)
        hbox1 = wx.boxsizer(wx.horizontal)
        self.btn_select_folder = wx.button(panel, label="select folder")
        self.btn_select_folder.bind(wx.evt_button, self.onselectfolder)
        hbox1.add(self.btn_select_folder, flag=wx.left, border=10)
        vbox.add(hbox1, flag=wx.expand | wx.top | wx.bottom, border=10)
        hbox2 = wx.boxsizer(wx.horizontal)
        self.listbox1 = wx.listbox(panel)
        self.listbox1.bind(wx.evt_listbox_dclick, self.onitemdoubleclick)
        hbox2.add(self.listbox1, proportion=1, flag=wx.expand | wx.all, border=10)
        self.listbox2 = wx.listbox(panel)
        hbox2.add(self.listbox2, proportion=1, flag=wx.expand | wx.all, border=10)
        vbox.add(hbox2, proportion=1, flag=wx.expand)
        hbox3 = wx.boxsizer(wx.horizontal)
        self.btn_export = wx.button(panel, label="export to ini")
        self.btn_export.bind(wx.evt_button, self.onexport)
        hbox3.add(self.btn_export, flag=wx.left, border=10)
        vbox.add(hbox3, flag=wx.align_center | wx.top | wx.bottom, border=10)
        panel.setsizer(vbox)
        self.settitle('lnk file selector')
        self.centre()
    def onselectfolder(self, event):
        with wx.dirdialog(self, "choose a folder", style=wx.dd_default_style) as dirdialog:
            if dirdialog.showmodal() == wx.id_cancel:
                return
            folder_path = dirdialog.getpath()
            self.lnk_files = [f for f in os.listdir(folder_path) if f.endswith('.lnk')]
            self.lnk_files = [os.path.join(folder_path, f) for f in self.lnk_files]
            self.listbox1.set([os.path.basename(f) for f in self.lnk_files])
    def onitemdoubleclick(self, event):
        selection = self.listbox1.getselection()
        selected_file = self.lnk_files[selection]
        if selected_file not in self.selected_files:
            self.selected_files.append(selected_file)
            self.listbox2.append(os.path.basename(selected_file))
    def onexport(self, event):
        with wx.filedialog(self, "save ini file", wildcard="ini files (*.ini)|*.ini",
                           style=wx.fd_save | wx.fd_overwrite_prompt) as filedialog:
            if filedialog.showmodal() == wx.id_cancel:
                return
            path = filedialog.getpath()
            self.exporttoini(path)
    def exporttoini(self, path):
        shell = win32com.client.dispatch("wscript.shell")
        with open(path, 'w') as file:
            for idx, lnk_path in enumerate(self.selected_files, start=1):
                shortcut = shell.createshortcut(lnk_path)
                target_path = shortcut.targetpath
                caption = os.path.splitext(os.path.basename(lnk_path))[0]
                file.write(f"[button{idx}]\n")
                file.write(f"caption = {caption}\n")
                file.write(f"link = {target_path}\n")
                file.write("color = clgreen\n")
                file.write("width = 150\n")
                file.write("height = 70\n\n")
        
        wx.messagebox(f"exported {len(self.selected_files)} items to {path}", "export successful", wx.ok | wx.icon_information)
if __name__ == '__main__':
    app = wx.app(false)
    frame = lnkfileselector(none)
    frame.show(true)
    app.mainloop()
项目背景
在日常的windows操作中,.lnk文件(快捷方式)经常被用来快速访问应用程序或文件。创建一个工具,让用户能够选择这些快捷方式,并将它们配置到一个ini文件中,可以大大提高管理和组织这些快捷方式的效率。
这个项目的目标是:
- 让用户选择一个文件夹并列出所有 .lnk文件。
- 让用户从列表中选择想要配置的快捷方式。
- 生成一个包含选中快捷方式的配置文件,配置文件的格式为特定的ini格式。
开发环境设置
首先,确保你的python环境中安装了以下必要的库:
- wxpython:用于创建图形用户界面。
- pywin32:用于解析快捷方式文件,获取其目标路径。
你可以通过以下命令安装这些库:
pip install wxpython pywin32
应用程序的主要功能
这个应用程序主要分为以下几个功能模块:
- 选择文件夹并列出 - .lnk文件:
 用户点击“选择文件夹”按钮后,可以选择一个文件夹,程序会自动列出该文件夹中的所有- .lnk文件。
- 双击添加 - .lnk文件到配置列表:
 用户可以双击- .lnk文件,将其添加到待配置的列表中。
- 导出配置文件: 
 用户点击“导出”按钮后,程序会将选中的- .lnk文件导出为特定格式的- buttons.ini文件。文件中包含每个快捷方式的名称、路径以及配置属性。
代码实现
以下是实现上述功能的完整代码:
import wx
import os
import win32com.client
class lnkfileselector(wx.frame):
    def __init__(self, *args, **kw):
        super(lnkfileselector, self).__init__(*args, **kw)
        self.initui()
        self.lnk_files = []
        self.selected_files = []
    def initui(self):
        panel = wx.panel(self)
        vbox = wx.boxsizer(wx.vertical)
        hbox1 = wx.boxsizer(wx.horizontal)
        self.btn_select_folder = wx.button(panel, label="select folder")
        self.btn_select_folder.bind(wx.evt_button, self.onselectfolder)
        hbox1.add(self.btn_select_folder, flag=wx.left, border=10)
        vbox.add(hbox1, flag=wx.expand | wx.top | wx.bottom, border=10)
        hbox2 = wx.boxsizer(wx.horizontal)
        self.listbox1 = wx.listbox(panel)
        self.listbox1.bind(wx.evt_listbox_dclick, self.onitemdoubleclick)
        hbox2.add(self.listbox1, proportion=1, flag=wx.expand | wx.all, border=10)
        self.listbox2 = wx.listbox(panel)
        hbox2.add(self.listbox2, proportion=1, flag=wx.expand | wx.all, border=10)
        vbox.add(hbox2, proportion=1, flag=wx.expand)
        hbox3 = wx.boxsizer(wx.horizontal)
        self.btn_export = wx.button(panel, label="export to ini")
        self.btn_export.bind(wx.evt_button, self.onexport)
        hbox3.add(self.btn_export, flag=wx.left, border=10)
        vbox.add(hbox3, flag=wx.align_center | wx.top | wx.bottom, border=10)
        panel.setsizer(vbox)
        self.settitle('lnk file selector')
        self.centre()
    def onselectfolder(self, event):
        with wx.dirdialog(self, "choose a folder", style=wx.dd_default_style) as dirdialog:
            if dirdialog.showmodal() == wx.id_cancel:
                return
            folder_path = dirdialog.getpath()
            self.lnk_files = [f for f in os.listdir(folder_path) if f.endswith('.lnk')]
            self.lnk_files = [os.path.join(folder_path, f) for f in self.lnk_files]
            self.listbox1.set([os.path.basename(f) for f in self.lnk_files])
    def onitemdoubleclick(self, event):
        selection = self.listbox1.getselection()
        selected_file = self.lnk_files[selection]
        if selected_file not in self.selected_files:
            self.selected_files.append(selected_file)
            self.listbox2.append(os.path.basename(selected_file))
    def onexport(self, event):
        with wx.filedialog(self, "save ini file", wildcard="ini files (*.ini)|*.ini",
                           style=wx.fd_save | wx.fd_overwrite_prompt) as filedialog:
            if filedialog.showmodal() == wx.id_cancel:
                return
            path = filedialog.getpath()
            self.exporttoini(path)
    def exporttoini(self, path):
        shell = win32com.client.dispatch("wscript.shell")
        with open(path, 'w') as file:
            for idx, lnk_path in enumerate(self.selected_files, start=1):
                shortcut = shell.createshortcut(lnk_path)
                target_path = shortcut.targetpath
                caption = os.path.splitext(os.path.basename(lnk_path))[0]
                file.write(f"[button{idx}]\n")
                file.write(f"caption = {caption}\n")
                file.write(f"link = {target_path}\n")
                file.write("color = clgreen\n")
                file.write("width = 150\n")
                file.write("height = 70\n\n")
        
        wx.messagebox(f"exported {len(self.selected_files)} items to {path}", "export successful", wx.ok | wx.icon_information)
if __name__ == '__main__':
    app = wx.app(false)
    frame = lnkfileselector(none)
    frame.show(true)
    app.mainloop()
详细功能说明
- 用户界面设计: - 我们使用 wxpython来创建一个简洁的用户界面,包含两个listbox,一个用于显示文件夹中的.lnk文件,另一个用于显示用户选择的文件。
- “选择文件夹”按钮用于让用户选择文件夹,之后列出其中的 .lnk文件。
- “导出”按钮用于将用户选择的文件导出为 buttons.ini文件。
 
- 我们使用 
- 解析 - .lnk文件:- 使用 win32com.client.dispatch("wscript.shell")创建快捷方式对象,并通过createshortcut方法获取.lnk文件的目标路径。
- 通过 os.path.basename提取.lnk文件名,并用作按钮的caption。
 
- 使用 
- 导出到 ini 文件: - exporttoini方法生成- buttons.ini文件。文件内容按照- [button1]的格式组织,每个按钮配置包括- caption(文件名)、- link(目标路径)、- color、- width和- height等属性。
 
最终效果
运行程序后,用户可以轻松地选择并配置 .lnk 文件,并将这些配置导出为 buttons.ini 文件。这个文件可以用于其他应用程序进行按钮布局或快捷方式配置。
通过这个项目,你不仅可以学到 wxpython 界面开发,还可以了解如何处理和解析windows快捷方式文件。如果你有类似的需求或项目,希望这个工具能为你提供帮助!
结果如下


总结
在这篇博客中,我们探讨了如何利用 wxpython 和 win32com.client 库创建一个简单但功能强大的工具。通过这个工具,用户可以选择、配置 .lnk 文件,并导出为特定格式的 ini 文件。这不仅提高了配置文件管理的效率,也展示了 python 在桌面应用开发中的强大功能。
以上就是使用python创建lnk文件选择器并导出配置文件的详细内容,更多关于python创建lnk文件选择器的资料请关注代码网其它相关文章!
 
             我要评论
我要评论 
                                             
                                             
                                             
                                             
                                            
发表评论