在数据处理和分析过程中,我们经常需要对数据进行各种转换。今天,我将分享如何使用 wxPython
和 pandas
库创建一个图形用户界面(GUI)应用程序,该程序可以选择一个 Excel 文件并将指定工作表中的第1列转换为行,然后将结果保存到指定目录下。
C:\pythoncode\new\matrixrote.py
环境准备
在开始之前,请确保你已经安装了以下库:
wxPython
:用于创建 GUI 应用程序。pandas
:用于处理 Excel 文件。
可以通过以下命令安装这些库:
pip install wxPython pandas
实现功能的 Python 代码
以下是完整的 Python 代码。该代码创建了一个 GUI 界面,允许用户选择 Excel 文件和工作表,并将第1列转换为行保存到指定目录。
import wx
import pandas as pd
import os
class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY, "Excel Column to Row Converter", size=(400, 300))
panel = wx.Panel(self, wx.ID_ANY)
vbox = wx.BoxSizer(wx.VERTICAL)
# File picker for selecting Excel file
self.file_picker = wx.FilePickerCtrl(panel, message="Choose an Excel file", wildcard="Excel files (*.xlsx)|*.xlsx")
vbox.Add(self.file_picker, 0, wx.EXPAND | wx.ALL, 10)
# Text control for sheet name
self.sheet_name = wx.TextCtrl(panel, wx.ID_ANY, "", style=wx.TE_CENTER)
self.sheet_name.SetHint("Enter sheet name (e.g., Sheet1)")
vbox.Add(self.sheet_name, 0, wx.EXPAND | wx.ALL, 10)
# Directory picker for selecting save path
self.save_path_picker = wx.DirPickerCtrl(panel, message="Choose a save directory")
vbox.Add(self.save_path_picker, 0, wx.EXPAND | wx.ALL, 10)
# Convert button
self.convert_button = wx.Button(panel, label="Convert")
vbox.Add(self.convert_button, 0, wx.CENTER | wx.ALL, 10)
self.convert_button.Bind(wx.EVT_BUTTON, self.on_convert)
panel.SetSizer(vbox)
def on_convert(self, event):
file_path = self.file_picker.GetPath()
sheet = self.sheet_name.GetValue()
save_dir = self.save_path_picker.GetPath()
if not file_path or not sheet or not save_dir:
wx.MessageBox("Please fill in all fields", "Error", wx.ICON_ERROR)
return
try:
df = pd.read_excel(file_path, sheet_name=sheet)
if df.empty:
wx.MessageBox(f"Sheet '{sheet}' is empty or does not exist", "Error", wx.ICON_ERROR)
return
# Convert the first column to a row
first_column = df.iloc[:, 0] # Get the first column
row_data = first_column.values.reshape(1, -1)
new_df = pd.DataFrame(row_data)
# Save the new DataFrame to the specified directory
output_path = os.path.join(save_dir, "converted_first_column_to_row.xlsx")
new_df.to_excel(output_path, index=False, header=False)
wx.MessageBox(f"File saved to {output_path}", "Success", wx.ICON_INFORMATION)
except Exception as e:
wx.MessageBox(str(e), "Error", wx.ICON_ERROR)
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame()
frame.Show()
return True
if __name__ == "__main__":
app = MyApp(False)
app.MainLoop()
代码详解
-
导入库:
import wx import pandas as pd import os
导入
wxPython
用于创建 GUI,导入pandas
用于数据处理,导入os
用于文件路径操作。 -
定义主窗口类 MyFrame:
class MyFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, wx.ID_ANY, "Excel Column to Row Converter", size=(400, 300)) ...
创建一个继承自
wx.Frame
的类MyFrame
,用于设置 GUI 的窗口和布局。 -
添加控件:
- 文件选择器:用于选择 Excel 文件。
- 文本框:用于输入工作表名称。
- 目录选择器:用于选择保存目录。
- 按钮:用于触发转换操作。
-
事件处理:
def on_convert(self, event): ...
定义
on_convert
方法,当用户点击“Convert”按钮时,执行以下操作:- 获取用户输入的文件路径、工作表名称和保存目录。
- 使用
pandas
读取指定的 Excel 文件和工作表。 - 检查工作表是否为空或不存在。
- 提取第1列数据并转换为行。
- 将转换后的数据保存为新的 Excel 文件。
-
主程序:
class MyApp(wx.App): def OnInit(self): frame = MyFrame() frame.Show() return True if __name__ == "__main__": app = MyApp(False) app.MainLoop()
创建应用程序实例并启动主事件循环。
如何运行
-
保存上述代码到一个文件中,例如
matrixrote.py
。 -
确保你已经安装了
wxPython
和pandas
。 -
打开命令行窗口,运行脚本:
python matrixrote.py
-
在弹出的 GUI 界面中,选择一个 Excel 文件,输入工作表名称,选择保存目录,点击“Convert”按钮即可完成操作。