用Python实现,点击pyqt5界面中的两个按钮,可以分别调用两个py文件

时间: 2023-06-04 11:03:21 浏览: 180
非常简单,您可以使用PyQt5的QPushButton控件并连接到按钮点击的槽函数。在每个槽函数中,您可以使用subprocess模块调用其他Python脚本。下面是一个示例代码: ```python import sys import subprocess from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setGeometry(100, 100, 300, 200) btn1 = QPushButton("Run Script 1", self) btn1.setGeometry(50, 50, 200, 30) btn1.clicked.connect(self.run_script1) btn2 = QPushButton("Run Script 2", self) btn2.setGeometry(50, 100, 200, 30) btn2.clicked.connect(self.run_script2) def run_script1(self): subprocess.run(['python', 'script1.py']) def run_script2(self): subprocess.run(['python', 'script2.py']) if __name__ == "__main__": app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_()) ``` 在此代码中,我们创建了一个MainWindow类,它包含两个QPushButton控件。每个按钮都与run_script1()和run_script2()槽函数连接,这些函数使用subprocess模块运行另外两个Python脚本。您只需将script1.py和script2.py替换为您要运行的Python脚本即可。

相关推荐

首先,我们需要安装PyQt5模块,可以通过以下命令进行安装: pip install PyQt5 接下来,我们可以使用Qt Designer工具来设计多层界面,例如设计一个主窗口和一个添加文件的子窗口。可以通过以下命令启动Qt Designer: designer 在Qt Designer中,我们可以通过拖拽和放置控件来设计界面,并且可以设置控件的属性和布局。 设计完成后,我们可以将.ui文件转换为.py文件,可以通过以下命令进行转换: pyuic5 input.ui -o output.py 其中,input.ui为设计好的界面文件,output.py为转换后的Python代码文件。 在Python代码中,我们可以通过以下方式加载设计好的界面: python from PyQt5.QtWidgets import QApplication, QMainWindow from output import Ui_MainWindow class MainWindow(QMainWindow, Ui_MainWindow): def __init__(self): super(MainWindow, self).__init__() self.setupUi(self) self.add_file_button.clicked.connect(self.add_file) def add_file(self): # 添加文件的功能代码 其中,Ui_MainWindow是由Qt Designer生成的类,继承自QMainWindow,可以通过调用setupUi方法来加载设计好的界面。 在上述代码中,我们还实现了一个添加文件的功能,可以通过连接add_file_button的clicked信号来实现。在add_file方法中,我们可以编写相应的添加文件逻辑。 总结起来,利用Python和PyQt5实现多层界面设计并实现相应添加文件功能的步骤如下: 1. 安装PyQt5模块; 2. 使用Qt Designer工具设计多层界面; 3. 将.ui文件转换为.py文件; 4. 在Python代码中加载设计好的界面,并实现相应功能。
### 回答1: 可以使用 Python GUI 库如 Tkinter 或 PyQt5 来编写 UI 界面程序。下面是一个使用 Tkinter 实现的简单示例: import tkinter as tk from tkinter import messagebox import subprocess def run_py1(): input_var = input_entry.get() subprocess.run(["python", "py1.py", input_var]) messagebox.showinfo("Info", "py1.py executed.") def run_py2(): subprocess.run(["python", "py2.py"]) messagebox.showinfo("Info", "py2.py executed.") def run_py3(): subprocess.run(["python", "py3.py"]) messagebox.showinfo("Info", "py3.py executed.") root = tk.Tk() root.title("Python UI") input_label = tk.Label(root, text="Input:") input_label.pack() input_entry = tk.Entry(root) input_entry.pack() button1 = tk.Button(root, text="Run py1.py", command=run_py1) button1.pack() button2 = tk.Button(root, text="Run py2.py", command=run_py2) button2.pack() button3 = tk.Button(root, text="Run py3.py", command=run_py3) button3.pack() root.mainloop() 这个程序定义了三个函数 run_py1()、run_py2()、run_py3(),分别执行三个 py 文件。第一个函数还使用了 tkinter 的 Entry 控件和 get() 方法获取用户输入的参量。 ### 回答2: 用Python编写UI界面程序可以使用Tkinter模块。下面是一个简单的示例程序,包括三个按钮,点击按钮分别执行三个.py文件。 python import tkinter as tk import subprocess def run_file1(): param = entry.get() subprocess.Popen(['python', 'file1.py', param]) def run_file2(): subprocess.Popen(['python', 'file2.py']) def run_file3(): subprocess.Popen(['python', 'file3.py']) root = tk.Tk() label = tk.Label(root, text="请输入参数:") label.pack() entry = tk.Entry(root) entry.pack() button1 = tk.Button(root, text="运行文件1", command=run_file1) button1.pack() button2 = tk.Button(root, text="运行文件2", command=run_file2) button2.pack() button3 = tk.Button(root, text="运行文件3", command=run_file3) button3.pack() root.mainloop() 在上面的代码中,run_file1()函数通过subprocess模块调用python命令执行file1.py文件,并传递键盘输入的参数。run_file2()和run_file3()函数类似地执行file2.py和file3.py文件。 ### 回答3: 使用Python编写UI界面程序可以使用Tkinter模块。下面是一个示例代码: python import tkinter as tk import subprocess def run_script_1(): parameter = input("请输入参数:") subprocess.run(["python", "script_1.py", parameter]) def run_script_2(): subprocess.run(["python", "script_2.py"]) def run_script_3(): subprocess.run(["python", "script_3.py"]) root = tk.Tk() button1 = tk.Button(root, text="运行脚本1", command=run_script_1) button1.pack() button2 = tk.Button(root, text="运行脚本2", command=run_script_2) button2.pack() button3 = tk.Button(root, text="运行脚本3", command=run_script_3) button3.pack() root.mainloop() 在上面的代码中,我们使用了subprocess模块来启动外部的Python脚本文件。run_script_1函数会获取用户在GUI界面中输入的参数,并将其作为命令行参数传递给script_1.py。run_script_2和run_script_3函数则直接运行对应的脚本文件。 请确保将文件名修改为实际的脚本文件名和文件路径,并将这些脚本文件放在与GUI程序相同的目录中。 希望这个示例对您有所帮助!
你可以使用QProcess类来在PyQt5中调用Python脚本并在原窗口中显示输出结果。以下是一个简单的例子: python import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit, QAction, QFileDialog, QHBoxLayout, QWidget from PyQt5.QtCore import QProcess class MainWindow(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.textEdit = QTextEdit() self.setCentralWidget(self.textEdit) runAction = QAction('Run Script', self) runAction.triggered.connect(self.runScript) fileMenu = self.menuBar().addMenu('File') fileMenu.addAction(runAction) self.setGeometry(300, 300, 500, 400) self.setWindowTitle('PyQt5 Run Python Script') def runScript(self): # 打开文件对话框选择Python脚本文件 fileName, _ = QFileDialog.getOpenFileName(self, "Select Python Script", "", "Python Files (*.py)") if fileName: # 创建QProcess对象并设置工作目录和命令 process = QProcess(self) process.setWorkingDirectory('.') process.start('python', [fileName]) # 读取进程的输出并在文本编辑器中显示 while process.waitForReadyRead(): output = process.readAll() self.textEdit.insertPlainText(str(output, 'utf-8')) if __name__ == '__main__': app = QApplication(sys.argv) mainWindow = MainWindow() mainWindow.show() sys.exit(app.exec_()) 这个例子创建一个带有文本编辑器的主窗口,同时提供了一个菜单选项“Run Script”来运行Python脚本。当用户点击该选项时,会打开一个文件对话框以选择Python脚本文件,并将其作为参数传递给QProcess对象的start()方法。然后,它将读取进程的输出,并将其插入到文本编辑器中以在原窗口中显示输出结果。
这个错误通常发生在你销毁了 QProcess 对象但是子进程仍然在运行的时候。为了避免这个错误,你可以在销毁 QProcess 对象之前,先调用其 kill() 方法来终止子进程。 以下是一个示例代码,演示如何使用 QProcess 执行另一个 Python 文件,并在程序退出时终止子进程: python import sys from PyQt5.QtCore import QProcess from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton class MainWindow(QMainWindow): def __init__(self): super().__init__() self.process = None button = QPushButton('Run', self) button.clicked.connect(self.start_process) def start_process(self): if self.process is not None and self.process.state() != QProcess.NotRunning: # 如果进程正在运行,不要启动一个新的进程 return self.process = QProcess() self.process.finished.connect(self.process_finished) self.process.start('python', ['other_script.py']) def process_finished(self): print('Process finished with exit code', self.process.exitCode()) self.process = None def closeEvent(self, event): if self.process is not None and self.process.state() != QProcess.NotRunning: # 在程序退出之前,终止子进程 self.process.kill() self.process.waitForFinished() event.accept() if __name__ == '__main__': app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_()) 在这个示例中,我们创建了一个 MainWindow 类,其中包含一个按钮,点击按钮时会启动另一个 Python 脚本 other_script.py。我们定义了 start_process() 方法来启动 QProcess,process_finished() 方法来处理子进程结束的信号,以及 closeEvent() 方法来在程序退出时终止子进程。 在 start_process() 方法中,我们首先检查之前是否已经启动了一个进程(即 self.process 不为 None),如果是,则直接返回。否则,我们创建一个新的 QProcess 对象,并调用其 start() 方法来启动 Python 解释器,并传入要执行的脚本文件路径。在 process_finished() 方法中,我们打印子进程的退出代码,并将 self.process 设置为 None,以便我们可以在下次点击按钮时启动新的进程。 在 closeEvent() 方法中,我们检查当前是否有进程正在运行,如果是,则调用 kill() 方法和 waitForFinished() 方法来终止子进程。最后,我们接受关闭事件并退出程序。
PyQt5 是一个 Python 的 GUI 库,Thrift 是一个跨语言的服务框架。在 PyQt5 中实现 Thrift RPC 连接主要需要以下步骤: 1. 安装 thrift 库 在终端中执行以下命令安装 thrift 库: pip install thrift 2. 编写 thrift 文件 定义 Thrift 服务的接口和数据类型,将其保存为 .thrift 文件。 例如,定义一个简单的服务接口: service Calculator { i32 add(1:i32 num1, 2:i32 num2), i32 sub(1:i32 num1, 2:i32 num2), } 3. 生成 Python 代码 使用 thrift 工具生成 Python 代码。在终端中执行以下命令: thrift -r --gen py calculator.thrift 4. 编写 PyQt5 界面 使用 PyQt5 设计界面,添加按钮等控件。 5. 编写 Thrift 客户端 在 PyQt5 代码中编写 Thrift 客户端,调用 Thrift 服务。 例如,实现 Thrift 客户端代码: python from thrift.transport import TSocket from thrift.transport import TTransport from thrift.protocol import TBinaryProtocol from thrift.protocol import TMultiplexedProtocol from calculator import Calculator class ThriftClient(object): def __init__(self, host, port): self.transport = TSocket.TSocket(host, port) self.transport = TTransport.TBufferedTransport(self.transport) protocol = TBinaryProtocol.TBinaryProtocol(self.transport) self.client = Calculator.Client(TMultiplexedProtocol(protocol, "Calculator")) def open(self): self.transport.open() def close(self): self.transport.close() def add(self, num1, num2): return self.client.add(num1, num2) def sub(self, num1, num2): return self.client.sub(num1, num2) 6. 连接 Thrift 服务 在 PyQt5 代码中连接 Thrift 服务,调用 Thrift 客户端。 例如,连接 Thrift 服务: python client = ThriftClient("localhost", 9090) client.open() result = client.add(1, 2) client.close() 这样就可以在 PyQt5 界面中实现 Thrift RPC 连接了。
### 回答1: 在Python3中,pyuic5是一个用于将Qt Designer设计的.ui文件转换为Python代码的工具。使用pyuic5可以方便地将GUI界面定义转换为Python文件,从而可以在程序中调用并使用。 要将ui文件转换为py文件,需要打开命令提示符或终端窗口(Windows系统下),输入以下命令: pyuic5 -x ui文件名.ui -o 转换后的文件名.py 其中,ui文件名为你的.ui文件的名称,转换后的文件名可以自定义。 在命令执行完毕后,会在当前目录下生成转换后的.py文件,你可以在你的Python代码中直接导入并调用其中的类来显示UI界面。 pyuic5的使用可以大大提高开发效率,尤其是当项目中需要多次修改界面时。因为每次修改后只需要重新转换一次即可,不需要每次手动编写代码。同时,也可以减少代码出错的可能性,确保程序的可靠性。因此,对于PyQt5 GUI开发来说,使用pyuic5是一个很不错的选择。 ### 回答2: Pyuic5是一个用于将Qt5 Designer设计的.ui文件转换为Python代码的工具。如果我们需要将我们在Qt5 Designer中设计好的UI文件使用在Python程序中,我们可以使用Pyuic5将其转换为Py文件,并在Python程序代码中导入。以下是将UI文件转换为Py文件的详细步骤: 第一步,首先需要在终端中输入以下命令安装pyuic5: bash pip install pyqt5-tools 第二步,打开终端,进入UI文件所在的目录,然后输入以下命令将UI文件转换为Py文件: bash pyuic5 -o <output_py_file_name>.py <input_ui_file_name>.ui 其中,<output_py_file_name>是我们要生成的Py文件的名称,<input_ui_file_name>是我们要转换的UI文件的名称。 第三步,将生成的Py文件导入到我们的Python程序中。可以使用Python的import语句来导入Py文件并在程序中使用UI界面。 在将UI文件成功转换为Py文件后,我们可以使用以下代码来创建UI界面的类对象并显示出来: python import sys from PyQt5.QtWidgets import QApplication, QMainWindow from <output_py_file_name> import Ui_MainWindow class MyWindow(QMainWindow): def __init__(self): super(MyWindow, self).__init__() self.ui = Ui_MainWindow() self.ui.setupUi(self) if __name__ == "__main__": app = QApplication(sys.argv) window = MyWindow() window.show() sys.exit(app.exec_()) 上述代码中,我们首先导入了我们要创建的UI界面的类对象,然后在我们自己定义的MyWindow类中创建了UI界面对象并设置其为主窗口widget。最后,通过调用show()方法来显示UI界面。运行程序后,我们就可以看到在Qt5 Designer中设计的UI界面成功地在我们的Python程序中显示出来了。 ### 回答3: pyuic5是一个用于将Qt Designer中设计的ui文件转为Python脚本的工具,使得开发者可以更方便地在PyQt5中使用ui界面。使用pyuic5将ui文件转为py文件的过程非常简单,并且可以大大加快开发效率。 首先,我们需要在命令行中运行以下命令:pyuic5 -o output_file.py input_file.ui,其中output_file.py是我们生成的Python脚本文件名,input_file.ui是我们需要转化的ui文件名。运行该命令后,pyuic5会自动生成一个Python脚本文件,其中包含了我们在Qt Designer中设计的所有ui界面元素。 接下来,我们需要在Python脚本中导入PyQt5库,并使用该库中的QApplication和QWidget模块来显示我们生成的ui界面。具体步骤如下: 1. 导入PyQt5库 from PyQt5.QtWidgets import QApplication, QWidget import sys 2. 创建一个QApplication对象 app = QApplication(sys.argv) 3. 创建QWidget对象,并将我们生成的Python脚本文件中的所有ui界面元素添加到QWidget中 widget = QWidget() ui = Ui_Form() # Ui_Form是我们通过pyuic5生成的Python脚本中的类名 ui.setupUi(widget) # 将生成的ui界面元素添加到QWidget中 4. 显示QWidget对象 widget.show() 5. 运行整个应用程序 sys.exit(app.exec_()) 通过以上步骤,我们就可以成功将ui文件转为py文件并显示ui界面了。这样,我们就可以更加方便地对ui界面进行修改和优化,从而提高开发效率。
在PyQt5中,可以通过实现点击事件的响应函数来实现按钮点击发送消息的功能。在项目的main.py文件中,可以添加一个点击事件的响应函数,具体代码如下: python import sys from PyQt5 import QtWidgets from click_show_text import Ui_MainWindow class MyPyQT_Form(QtWidgets.QMainWindow, Ui_MainWindow): def __init__(self): super(MyPyQT_Form, self).__init__() self.setupUi(self) self.pushButton.clicked.connect(self.push_button_click) # 将按钮的点击事件与响应函数连接起来 def push_button_click(self): self.textEdit.setText("我点击了按钮,显示框显示出文字") # 在响应函数中设置文本框的显示内容 if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) my_pyqt_form = MyPyQT_Form() my_pyqt_form.show() sys.exit(app.exec_()) 在上述代码中,我们首先导入了必要的模块,然后定义了一个名为MyPyQT_Form的类,该类继承自QtWidgets.QMainWindow和Ui_MainWindow。在类的初始化函数中,我们调用了父类的初始化函数,并使用self.setupUi(self)来设置界面。接下来,我们通过self.pushButton.clicked.connect(self.push_button_click)将按钮的点击事件与响应函数push_button_click连接起来。在push_button_click函数中,我们使用self.textEdit.setText来设置文本框的显示内容为"我点击了按钮,显示框显示出文字"。最后,我们创建了一个应用程序对象app,实例化了MyPyQT_Form类,并显示出来。 这样,当按钮被点击时,就会触发push_button_click函数,从而将文本框的显示内容设置为指定的文字。 #### 引用[.reference_title] - *1* [python的Pyqt5按钮与文本框联动](https://blog.csdn.net/lm_is_dc/article/details/123373487)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
好的,我会使用 PyQT5 来实现这个程序。PyQt5 是一个用于创建 GUI 应用程序的 Python 模块,它是基于 Qt 库开发的。我将使用 PyQT5 来创建一个窗口,添加一些组件并实现对话功能。 首先,我需要安装 PyQt5 模块。在终端中运行以下命令: pip install PyQt5 接下来,我将创建一个名为 chatbot.py 的 Python 文件,并添加以下代码: python import sys from PyQt5.QtWidgets import * class Chatbot(QWidget): def __init__(self): super().__init__() # 设置窗口标题 self.setWindowTitle('Chatbot') # 设置窗口大小 self.resize(500, 500) # 创建组件 self.input_box = QLineEdit() self.chat_box = QTextEdit() self.send_button = QPushButton('Send') # 创建布局 layout = QVBoxLayout() layout.addWidget(self.chat_box) layout.addWidget(self.input_box) layout.addWidget(self.send_button) # 设置布局 self.setLayout(layout) # 绑定事件 self.send_button.clicked.connect(self.send_message) def send_message(self): message = self.input_box.text() self.input_box.clear() response = get_response(message) self.chat_box.append('You: ' + message) self.chat_box.append('Bot: ' + response) def get_response(message): # TODO: 在此处添加与 Chatbot 对话的 AI 代码 return 'Hello! How can I help you?' if __name__ == '__main__': app = QApplication(sys.argv) chatbot = Chatbot() chatbot.show() sys.exit(app.exec_()) 在这段代码中,我创建了一个名为 Chatbot 的类,它继承自 QWidget 类,用于创建 GUI 窗口。在 __init__ 方法中,我添加了三个组件:一个 QLineEdit 用于输入消息,一个 QTextEdit 用于显示聊天记录,以及一个 QPushButton 用于发送消息。 我还创建了一个名为 send_message 的方法,用于响应发送按钮的点击事件。在该方法中,我获取用户输入的消息,清空输入框,然后调用 get_response 方法获取机器人的回复,并将对话记录添加到聊天框中。 最后,在 __main__ 方法中,我创建了一个 QApplication 对象,并将 Chatbot 对象显示出来。 现在,我需要在 get_response 方法中添加与 Chatbot 对话的 AI 代码。由于你之前提到过 ChitGPT,我将使用它来实现 AI 功能。以下是完整的 chatbot.py 代码: python import sys import openai from PyQt5.QtWidgets import * class Chatbot(QWidget): def __init__(self): super().__init__() # 设置窗口标题 self.setWindowTitle('Chatbot') # 设置窗口大小 self.resize(500, 500) # 创建组件 self.input_box = QLineEdit() self.chat_box = QTextEdit() self.send_button = QPushButton('Send') # 创建布局 layout = QVBoxLayout() layout.addWidget(self.chat_box) layout.addWidget(self.input_box) layout.addWidget(self.send_button) # 设置布局 self.setLayout(layout) # 绑定事件 self.send_button.clicked.connect(self.send_message) # 初始化 OpenAI API openai.api_key = 'YOUR_API_KEY' def send_message(self): message = self.input_box.text() self.input_box.clear() response = get_response(message) self.chat_box.append('You: ' + message) self.chat_box.append('Bot: ' + response) def get_response(self, message): prompt = f"User: {message}\nBot:" response = openai.Completion.create( engine="text-davinci-002", prompt=prompt, temperature=0.5, max_tokens=1024, n=1, stop=None, timeout=60, ) message = response.choices[0].text.strip() return message if __name__ == '__main__': app = QApplication(sys.argv) chatbot = Chatbot() chatbot.show() sys.exit(app.exec_()) 在 get_response 方法中,我使用了 OpenAI 的 API 来获取 AI 的回复。首先,我将用户输入的消息和一个 Bot: 前缀组合成一个 prompt,然后传递给 openai.Completion.create 方法。该方法将使用 OpenAI 的 GPT 模型生成 AI 的回复。 最后,我将 AI 的回复返回给 send_message 方法,并将其添加到聊天框中。 请注意,你需要将 YOUR_API_KEY 替换为你的 OpenAI API 密钥,才能使程序正常工作。 现在,你可以在终端中运行 python chatbot.py 来启动程序,并与 AI 进行对话了。
抱歉,根据我使用的API,我无法在这个平台上提供完整的项目代码。但是,我可以提供一个基本框架,您可以根据自己的需求进行修改和实现。 #### 三层架构 在这个项目中,我们将使用三层架构:表示层、业务逻辑层和数据访问层。 - 表示层:使用PyQt5实现GUI界面,提供用户交互功能。 - 业务逻辑层:处理用户请求,调用数据访问层进行数据操作。 - 数据访问层:使用MySQL数据库进行数据的持久化操作。 #### 项目框架 1. 安装必要的库 python pip install PyQt5 pip install mysql-connector-python 2. 创建MySQL数据库 在MySQL中创建一个名为mydatabase的数据库,并创建一个名为students的表,包含以下字段: - id: int - name: varchar(255) - age: int - gender: varchar(255) - major: varchar(255) 3. 创建GUI界面 使用Qt Designer创建GUI界面,并将其保存为ui文件。然后使用pyuic5工具将ui文件转换为Python文件。 python pyuic5 mygui.ui -o mygui.py 4. 实现业务逻辑层 创建一个名为student_service.py的文件,并实现以下功能: - 获取所有学生信息 - 添加学生信息 - 修改学生信息 - 删除学生信息 python import mysql.connector class StudentService: def __init__(self): self.db = mysql.connector.connect( host="localhost", user="yourusername", password="yourpassword", database="mydatabase" ) self.cursor = self.db.cursor() def get_all_students(self): self.cursor.execute("SELECT * FROM students") return self.cursor.fetchall() def add_student(self, name, age, gender, major): sql = "INSERT INTO students (name, age, gender, major) VALUES (%s, %s, %s, %s)" val = (name, age, gender, major) self.cursor.execute(sql, val) self.db.commit() def update_student(self, id, name, age, gender, major): sql = "UPDATE students SET name=%s, age=%s, gender=%s, major=%s WHERE id=%s" val = (name, age, gender, major, id) self.cursor.execute(sql, val) self.db.commit() def delete_student(self, id): sql = "DELETE FROM students WHERE id=%s" val = (id,) self.cursor.execute(sql, val) self.db.commit() def __del__(self): self.db.close() 5. 实现表示层 创建一个名为myapp.py的文件,并实现以下功能: - 连接数据库 - 显示所有学生信息 - 添加学生信息 - 修改学生信息 - 删除学生信息 python import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidgetItem from mygui import Ui_MainWindow from student_service import StudentService class MyApp(QMainWindow, Ui_MainWindow): def __init__(self): super().__init__() self.setupUi(self) self.student_service = StudentService() self.show_all_students() self.btn_add.clicked.connect(self.add_student) self.btn_update.clicked.connect(self.update_student) self.btn_delete.clicked.connect(self.delete_student) self.tableWidget.doubleClicked.connect(self.edit_student) def show_all_students(self): students = self.student_service.get_all_students() self.tableWidget.setRowCount(len(students)) for i, student in enumerate(students): id = QTableWidgetItem(str(student[0])) name = QTableWidgetItem(student[1]) age = QTableWidgetItem(str(student[2])) gender = QTableWidgetItem(student[3]) major = QTableWidgetItem(student[4]) self.tableWidget.setItem(i, 0, id) self.tableWidget.setItem(i, 1, name) self.tableWidget.setItem(i, 2, age) self.tableWidget.setItem(i, 3, gender) self.tableWidget.setItem(i, 4, major) def add_student(self): name = self.lineEdit_name.text() age = self.spinBox_age.value() gender = self.comboBox_gender.currentText() major = self.lineEdit_major.text() self.student_service.add_student(name, age, gender, major) self.show_all_students() def update_student(self): id = self.lineEdit_id.text() name = self.lineEdit_name.text() age = self.spinBox_age.value() gender = self.comboBox_gender.currentText() major = self.lineEdit_major.text() self.student_service.update_student(id, name, age, gender, major) self.show_all_students() def delete_student(self): id = self.lineEdit_id.text() self.student_service.delete_student(id) self.show_all_students() def edit_student(self): row = self.tableWidget.currentRow() id = int(self.tableWidget.item(row, 0).text()) name = self.tableWidget.item(row, 1).text() age = int(self.tableWidget.item(row, 2).text()) gender = self.tableWidget.item(row, 3).text() major = self.tableWidget.item(row, 4).text() self.lineEdit_id.setText(str(id)) self.lineEdit_name.setText(name) self.spinBox_age.setValue(age) self.comboBox_gender.setCurrentText(gender) self.lineEdit_major.setText(major) if __name__ == '__main__': app = QApplication(sys.argv) myapp = MyApp() myapp.show() sys.exit(app.exec_()) 6. 运行程序 python python myapp.py 7. 结束程序 python Ctrl+C 这个项目只是一个基本框架,仅供参考。您可以根据自己的需求进行修改和实现。

最新推荐

【PyQt案例】PyQt 图解Qt Designer工具的使用方法,并封装exe文件

Qt Designer是PyQt程序UI界面的实现工具,Qt Designer工具使用简单,可以通过拖拽和点击完成复杂界面设计,并且设计完成的.ui程序可以转换成.py文件供python程序调用。本文主要通过用户登录需求描述Qt Designer工具...

Tomcat 相关面试题,看这篇!.docx

图文并茂吃透面试题,看完这个,吊打面试官,拿高薪offer!

基于51单片机的usb键盘设计与实现(1).doc

基于51单片机的usb键盘设计与实现(1).doc

"海洋环境知识提取与表示:专用导航应用体系结构建模"

对海洋环境知识提取和表示的贡献引用此版本:迪厄多娜·察查。对海洋环境知识提取和表示的贡献:提出了一个专门用于导航应用的体系结构。建模和模拟。西布列塔尼大学-布雷斯特,2014年。法语。NNT:2014BRES0118。电话:02148222HAL ID:电话:02148222https://theses.hal.science/tel-02148222提交日期:2019年HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire论文/西布列塔尼大学由布列塔尼欧洲大学盖章要获得标题西布列塔尼大学博士(博士)专业:计算机科学海洋科学博士学院对海洋环境知识的提取和表示的贡献体系结构的建议专用于应用程序导航。提交人迪厄多内·察察在联合研究单位编制(EA编号3634)海军学院

react中antd组件库里有个 rangepicker 我需要默认显示的当前月1号到最后一号的数据 要求选择不同月的时候 开始时间为一号 结束时间为选定的那个月的最后一号

你可以使用 RangePicker 的 defaultValue 属性来设置默认值。具体来说,你可以使用 moment.js 库来获取当前月份和最后一天的日期,然后将它们设置为 RangePicker 的 defaultValue。当用户选择不同的月份时,你可以在 onChange 回调中获取用户选择的月份,然后使用 moment.js 计算出该月份的第一天和最后一天,更新 RangePicker 的 value 属性。 以下是示例代码: ```jsx import { useState } from 'react'; import { DatePicker } from 'antd';

基于plc的楼宇恒压供水系统学位论文.doc

基于plc的楼宇恒压供水系统学位论文.doc

"用于对齐和识别的3D模型计算机视觉与模式识别"

表示用于对齐和识别的3D模型马蒂厄·奥布里引用此版本:马蒂厄·奥布里表示用于对齐和识别的3D模型计算机视觉与模式识别[cs.CV].巴黎高等师范学校,2015年。英语NNT:2015ENSU0006。电话:01160300v2HAL Id:tel-01160300https://theses.hal.science/tel-01160300v22018年4月11日提交HAL是一个多学科的开放获取档案馆,用于存放和传播科学研究文件,无论它们是否已这些文件可能来自法国或国外的教学和研究机构,或来自公共或私人研究中心。L’archive ouverte pluridisciplinaire博士之路博士之路博士之路在获得等级时,DOCTEURDE L'ÉCOLE NORMALE SUPERIEURE博士学校ED 386:巴黎中心数学科学Discipline ou spécialité:InformatiquePrésentée et soutenue par:马蒂厄·奥布里le8 may 2015滴度表示用于对齐和识别的Unité derechercheThèse dirigée par陪审团成员équipe WILLOW(CNRS/ENS/INRIA UMR 8548)慕尼黑工业大学(TU Munich�

valueError: Pandas data cast to numpy dtype of object. Check input data with np.asarray(data).

这个错误通常发生在使用 Pandas DataFrame 时,其中包含了一些不能被转换为数字类型的数据。 解决方法是使用 `pd.to_numeric()` 函数将数据转换为数字类型。例如: ```python import pandas as pd import numpy as np # 创建一个包含字符串和数字的 DataFrame df = pd.DataFrame({'A': ['a', 'b', 'c'], 'B': [1, 2, '3']}) # 尝试将整个 DataFrame 转换为数字类型会报错 np.asarray(df, dtype=np.float) # 使

基于VC--的五子棋程序设计与实现毕业设计.doc

基于VC--的五子棋程序设计与实现毕业设计.doc

体系结构驱动的普遍性应用程序中

体系结构驱动的普遍性应用程序的自主适应艾蒂安·甘德里勒引用此版本:艾蒂安·甘德里勒。由体系结构驱动的普遍性应用程序的自主适应。无处不在的计算。格勒诺布尔大学,2014年。法语。NNT:2014GRENM078。电话:01215004HAL ID:电话:01215004https://theses.hal.science/tel-01215004提交日期:2015年HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire论文要获得的等级格勒诺布尔大学博士专业:计算机科学部长令:2006年提交人艾蒂安·G·安德里尔论文由Philippe LAlanda指导由Stephanie CHollet共同指导在格勒诺布尔计算机科学实验室编写数学、信息科学与技术、计算机科学博士体系结构驱动的普遍性应用程序的自主适应论文�