class Window(QtWidgets.QWidget): def __init__(self): super().__init__() btn_chooseFolder = QtWidgets.QPushButton('选择目录', self) btn_chooseFolder.setFixedSize(100, 25) self.label_path = QtWidgets.QLabel('', self) self.folderPath = '' btn_run = QtWidgets.QPushButton('开始', self) btn_run.setFixedSize(60, 25) # 创建一个水平layout作为内部layout hl = QtWidgets.QHBoxLayout() hl.addWidget(btn_chooseFolder) hl.addWidget(self.label_path) hl.addWidget(btn_run) self.textEdit = QtWidgets.QPlainTextEdit(self) # 创建上级layout layout = QtWidgets.QVBoxLayout() # 添加 子layout layout.addLayout(hl) # 添加内部控件 layout.addWidget(self.textEdit) # 指定容器控件自身使用的layout self.setLayout(layout) # 注册按钮点击处理 btn_chooseFolder.clicked.connect(self.chooseFolder) btn_run.clicked.connect(self.run) def chooseFolder(self): filePath = QtWidgets.QFileDialog.getExistingDirectory(self, "选择文件所在目录") self.label_path.setText(filePath) self.folderPath = filePath def run(self): for (dirpath, dirnames, filenames) in os.walk(self.folderPath): for fn in filenames: # 把 dirpath 和 每个文件名拼接起来 就是全路径 fpath = os.path.join(dirpath, fn) self.textEdit.appendPlainText(fpath + '\n') mp3Path = os.path.join(dirpath, fn.replace('.txt', '.mp3')) cmd = f'edge-tts --voice {VOICE} -f "{fpath}" --write-media "{mp3Path}"' print(cmd) os.system(cmd) app = QtWidgets.QApplication([]) window = Window() window.resize(400, 200) window.show() app.exec_()
时间: 2024-02-14 08:23:00 浏览: 24
这是一个使用PyQt5编写的GUI程序,可以选择一个目录,遍历该目录下的所有文件,将每个文件转换成语音文件。具体实现方式是通过在程序中调用Edge TTS命令行工具来实现的。用户可以通过界面中的按钮来选择目录和开始转换。程序界面中包括一个QHBoxLayout和一个QVBoxLayout,用于布局子控件。其中QHBoxLayout中包括一个选择目录的按钮、一个显示选择的目录路径的标签和一个开始转换的按钮。QVBoxLayout中则包含一个QPlainTextEdit,用于显示转换过程中的信息。
相关问题
class Pyqt5_Phone(Qtwidgets.Qwidget, ui_Mainwindow) : def __init_(self): super(Pyqt5_Phone, self).__init__()self.setupUi(self) self.init() self.setwindowTitle("打电话") # self.ser = serial .Serial( ' / dev/ttyUSB1 ',115200,timeout=None)self.ser = serial.Serial( '/dev/ttyUSB1',115200,timeout=3)self.ATnum = 0 self.cmd=【
这是一个 PyQt5 程序的类定义,主要功能是打电话。其中,使用了一个名为 ui_Mainwindow 的 UI 文件,该文件中定义了界面布局和控件。类的定义如下:
```
class Pyqt5_Phone(Qtwidgets.Qwidget, ui_Mainwindow):
def __init__(self):
super(Pyqt5_Phone, self).__init__()
self.setupUi(self)
self.init()
self.setwindowTitle("打电话")
self.ser = serial.Serial('/dev/ttyUSB1', 115200, timeout=3)
self.ATnum = 0
self.cmd = 【# 这里缺少了 cmd 的具体定义,无法确定其功能和形式】
```
该类继承自 PyQt5.QtWidgets.QWidget 类和 ui_Mainwindow 类,其中 ui_Mainwindow 类是通过 PyQt5.uic.loadUiType() 函数从 UI 文件中加载的。
在类的构造函数中,首先调用了父类的构造函数,然后通过 self.setupUi(self) 初始化了界面布局和控件,调用了 self.init() 方法进行一些初始化操作,设置了窗口标题为 "打电话"。
接下来,通过 serial.Serial() 函数创建了一个串口对象,用于与外部设备进行通信。其中,'/dev/ttyUSB1' 是串口的设备文件名,115200 是波特率,timeout=3 表示串口通信的超时时间为 3 秒。
最后,定义了一个名为 cmd 的变量,但是缺少了其具体定义,无法确定其功能和形式。
class LoginWindow(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setFixedSize(800, 500) self.setWindowTitle('鸡爪称重系统')中怎么调用class MainWindow(QWidget): def __init__(self, user_id): super().__init__() self.user_id = user_id self.initUI() # 打开串口 self.ser = serial.Serial('COM7', 9600, timeout=1) def initUI(self): # 创建用于显示员工信息的控件 self.info_label = QLabel("员工信息", self) self.info_label.move(100, 50) self.info_label.setStyleSheet("font-size: 24px; color: black; background-color: #eee; border-radius: 10px;")
要在 LoginWindow 类中调用 MainWindow 类,你需要在 LoginWindow 类中添加一个按钮或者其他控件,然后给这个控件添加一个信号(signal),当这个控件被点击时,就会触发这个信号。接着在 LoginWindow 类中添加一个槽(slot),当信号被触发时,就会执行这个槽中的代码,从而打开 MainWindow 窗口。具体实现方法如下:
在 LoginWindow 类的 initUI 方法中添加一个按钮:
```
self.open_main_window_button = QPushButton("打开主窗口", self)
self.open_main_window_button.move(100, 100)
self.open_main_window_button.clicked.connect(self.open_main_window)
```
然后添加一个槽函数 open_main_window:
```
def open_main_window(self):
self.main_window = MainWindow(user_id)
self.main_window.show()
self.close()
```
这个方法中首先创建一个 MainWindow 实例,并传入 user_id 参数。然后调用 show 方法显示 MainWindow 窗口,并关闭当前 LoginWindow 窗口。这样当点击打开主窗口的按钮时,就会触发 open_main_window 方法,从而打开 MainWindow 窗口。