请会pyqt5的大佬看看有什么问题
我想用pyqt5仿写一个记事本,界面是通过qtdesigner做了之后转成python的,为了实现界面与业务分离,在另外一个python文件中写业务代码。问题是我想在点击文件->新建之后能在文本框里显示一些文本。在业务代码中连接了信号与槽,但是完全不起作用,点了一点反应也没有,大佬们知道哪里出错了吗?
以下是完整代码:
notepad.py
```python
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow
from notepadui import Ui_MainWindow
class MyNotebook(QMainWindow, Ui_MainWindow):#定义新的类实现界面与操作代码的分离
resized = QtCore.pyqtSignal()#定义一个新的信号
def __init__(self, parent=None):
super(MyNotebook, self).__init__(parent=parent)#父类初始化
self.setupUi(self)
self.action.triggered.connect(self.on_newFile)
self.resized.connect(self.adjustTextEditSize)
self.setting()
def resizeEvent(self, event):#重写调整窗口尺寸函数
self.resized.emit()#发射信号
return super(MyNotebook, self).resizeEvent(event)
def setting(self):
pass
def on_newFile(self):
self.textEdit.setText('new')#始终执行不到这里的槽
def adjustTextEditSize(self):
self.textEdit.resize(self.width, self.height-23)#调整文本框大小与窗口大小一致
if __name__ == '__main__':
app = QApplication(sys.argv)
MainWindow = QMainWindow()
ui = MyNotebook()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
```
notepadui.py
```python
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'notepad.ui'
#
# Created by: PyQt5 UI code generator 5.13.0
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.setEnabled(True)
MainWindow.resize(667, 545)
font = QtGui.QFont()
font.setFamily("幼圆")
MainWindow.setFont(font)
MainWindow.setAutoFillBackground(False)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.textEdit = QtWidgets.QTextEdit(self.centralwidget)
self.textEdit.setGeometry(QtCore.QRect(0, 0, 667, 522))
self.textEdit.setObjectName("textEdit")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 667, 18))
self.menubar.setObjectName("menubar")
self.menu = QtWidgets.QMenu(self.menubar)
self.menu.setObjectName("menu")
self.menu_2 = QtWidgets.QMenu(self.menubar)
self.menu_2.setObjectName("menu_2")
self.menu_3 = QtWidgets.QMenu(self.menubar)
self.menu_3.setObjectName("menu_3")
self.menu_4 = QtWidgets.QMenu(self.menubar)
self.menu_4.setObjectName("menu_4")
self.menu_6 = QtWidgets.QMenu(self.menu_4)
self.menu_6.setObjectName("menu_6")
self.menu_5 = QtWidgets.QMenu(self.menubar)
self.menu_5.setObjectName("menu_5")
MainWindow.setMenuBar(self.menubar)
self.action = QtWidgets.QAction(MainWindow)
self.action.setObjectName("action")
self.action_2 = QtWidgets.QAction(MainWindow)
self.action_2.setObjectName("action_2")
self.action_3 = QtWidgets.QAction(MainWindow)
self.action_3.setObjectName("action_3")
self.action_4 = QtWidgets.QAction(MainWindow)
self.action_4.setObjectName("action_4")
self.action_5 = QtWidgets.QAction(MainWindow)
self.action_5.setObjectName("action_5")
self.action_7 = QtWidgets.QAction(MainWindow)
self.action_7.setObjectName("action_7")
self.action_8 = QtWidgets.QAction(MainWindow)
self.action_8.setObjectName("action_8")
self.action_10 = QtWidgets.QAction(MainWindow)
self.action_10.setObjectName("action_10")
self.action_11 = QtWidgets.QAction(MainWindow)
self.action_11.setObjectName("action_11")
self.action_13 = QtWidgets.QAction(MainWindow)
self.action_13.setObjectName("action_13")
self.action_14 = QtWidgets.QAction(MainWindow)
self.action_14.setObjectName("action_14")
self.action_15 = QtWidgets.QAction(MainWindow)
self.action_15.setObjectName("action_15")
self.action_16 = QtWidgets.QAction(MainWindow)
self.action_16.setObjectName("action_16")
self.action_18 = QtWidgets.QAction(MainWindow)
self.action_18.setObjectName("action_18")
self.action_19 = QtWidgets.QAction(MainWindow)
self.action_19.setObjectName("action_19")
self.action_20 = QtWidgets.QAction(MainWindow)
self.action_20.setObjectName("action_20")
self.action_21 = QtWidgets.QAction(MainWindow)
self.action_21.setObjectName("action_21")
self.action_22 = QtWidgets.QAction(MainWindow)
self.action_22.setObjectName("action_22")
self.action_24 = QtWidgets.QAction(MainWindow)
self.action_24.setObjectName("action_24")
self.action_25 = QtWidgets.QAction(MainWindow)
self.action_25.setObjectName("action_25")
self.action_26 = QtWidgets.QAction(MainWindow)
self.action_26.setCheckable(True)
self.action_26.setObjectName("action_26")
self.action_27 = QtWidgets.QAction(MainWindow)
self.action_27.setObjectName("action_27")
self.action_29 = QtWidgets.QAction(MainWindow)
self.action_29.setCheckable(True)
self.action_29.setObjectName("action_29")
self.action_30 = QtWidgets.QAction(MainWindow)
self.action_30.setObjectName("action_30")
self.action_31 = QtWidgets.QAction(MainWindow)
self.action_31.setObjectName("action_31")
self.action_33 = QtWidgets.QAction(MainWindow)
self.action_33.setObjectName("action_33")
self.action_34 = QtWidgets.QAction(MainWindow)
self.action_34.setObjectName("action_34")
self.action_35 = QtWidgets.QAction(MainWindow)
self.action_35.setObjectName("action_35")
self.action_36 = QtWidgets.QAction(MainWindow)
self.action_36.setObjectName("action_36")
self.menu.addAction(self.action)
self.menu.addAction(self.action_2)
self.menu.addAction(self.action_3)
self.menu.addAction(self.action_4)
self.menu.addAction(self.action_5)
self.menu.addSeparator()
self.menu.addAction(self.action_7)
self.menu.addAction(self.action_8)
self.menu.addSeparator()
self.menu.addAction(self.action_10)
self.menu_2.addAction(self.action_11)
self.menu_2.addSeparator()
self.menu_2.addAction(self.action_13)
self.menu_2.addAction(self.action_14)
self.menu_2.addAction(self.action_15)
self.menu_2.addAction(self.action_16)
self.menu_2.addSeparator()
self.menu_2.addAction(self.action_18)
self.menu_2.addAction(self.action_19)
self.menu_2.addAction(self.action_20)
self.menu_2.addAction(self.action_21)
self.menu_2.addAction(self.action_22)
self.menu_2.addSeparator()
self.menu_2.addAction(self.action_24)
self.menu_2.addAction(self.action_25)
self.menu_3.addAction(self.action_26)
self.menu_3.addAction(self.action_27)
self.menu_6.addAction(self.action_34)
self.menu_6.addAction(self.action_35)
self.menu_6.addAction(self.action_36)
self.menu_4.addAction(self.menu_6.menuAction())
self.menu_4.addAction(self.action_29)
self.menu_5.addAction(self.action_30)
self.menu_5.addAction(self.action_31)
self.menu_5.addSeparator()
self.menu_5.addAction(self.action_33)
self.menubar.addAction(self.menu.menuAction())
self.menubar.addAction(self.menu_2.menuAction())
self.menubar.addAction(self.menu_3.menuAction())
self.menubar.addAction(self.menu_4.menuAction())
self.menubar.addAction(self.menu_5.menuAction())
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Notepad"))
self.menu.setTitle(_translate("MainWindow", "文件"))
self.menu_2.setTitle(_translate("MainWindow", "编辑"))
self.menu_3.setTitle(_translate("MainWindow", "格式"))
self.menu_4.setTitle(_translate("MainWindow", "查看"))
self.menu_6.setTitle(_translate("MainWindow", "缩放"))
self.menu_5.setTitle(_translate("MainWindow", "帮助"))
self.action.setText(_translate("MainWindow", "新建"))
self.action.setShortcut(_translate("MainWindow", "Ctrl+N"))
self.action_2.setText(_translate("MainWindow", "新窗口"))
self.action_2.setShortcut(_translate("MainWindow", "Ctrl+Shift+N"))
self.action_3.setText(_translate("MainWindow", "打开"))
self.action_3.setShortcut(_translate("MainWindow", "Ctrl+O"))
self.action_4.setText(_translate("MainWindow", "保存"))
self.action_4.setShortcut(_translate("MainWindow", "Ctrl+S"))
self.action_5.setText(_translate("MainWindow", "另存为"))
self.action_5.setShortcut(_translate("MainWindow", "Ctrl+Shift+S"))
self.action_7.setText(_translate("MainWindow", "页面设置"))
self.action_8.setText(_translate("MainWindow", "打印"))
self.action_8.setShortcut(_translate("MainWindow", "Ctrl+P"))
self.action_10.setText(_translate("MainWindow", "退出"))
self.action_11.setText(_translate("MainWindow", "撤销"))
self.action_11.setShortcut(_translate("MainWindow", "Ctrl+Z"))
self.action_13.setText(_translate("MainWindow", "剪切"))
self.action_13.setShortcut(_translate("MainWindow", "Ctrl+X"))
self.action_14.setText(_translate("MainWindow", "复制"))
self.action_14.setShortcut(_translate("MainWindow", "Ctrl+C"))
self.action_15.setText(_translate("MainWindow", "粘贴"))
self.action_15.setShortcut(_translate("MainWindow", "Ctrl+V"))
self.action_16.setText(_translate("MainWindow", "删除"))
self.action_16.setShortcut(_translate("MainWindow", "Del"))
self.action_18.setText(_translate("MainWindow", "查找"))
self.action_18.setShortcut(_translate("MainWindow", "Ctrl+F"))
self.action_19.setText(_translate("MainWindow", "查找下一个"))
self.action_19.setShortcut(_translate("MainWindow", "F3"))
self.action_20.setText(_translate("MainWindow", "查找上一个"))
self.action_20.setShortcut(_translate("MainWindow", "Shift+F3"))
self.action_21.setText(_translate("MainWindow", "替换"))
self.action_21.setShortcut(_translate("MainWindow", "Ctrl+H"))
self.action_22.setText(_translate("MainWindow", "转到"))
self.action_22.setShortcut(_translate("MainWindow", "Ctrl+G"))
self.action_24.setText(_translate("MainWindow", "全选"))
self.action_24.setShortcut(_translate("MainWindow", "Ctrl+A"))
self.action_25.setText(_translate("MainWindow", "时间/日期"))
self.action_25.setShortcut(_translate("MainWindow", "F5"))
self.action_26.setText(_translate("MainWindow", "自动换行"))
self.action_27.setText(_translate("MainWindow", "字体"))
self.action_29.setText(_translate("MainWindow", "状态栏"))
self.action_30.setText(_translate("MainWindow", "查看帮助"))
self.action_31.setText(_translate("MainWindow", "发送反馈"))
self.action_33.setText(_translate("MainWindow", "关于记事本"))
self.action_34.setText(_translate("MainWindow", "放大"))
self.action_34.setShortcut(_translate("MainWindow", "Ctrl++"))
self.action_35.setText(_translate("MainWindow", "缩小"))
self.action_35.setShortcut(_translate("MainWindow", "Ctrl+-"))
self.action_36.setText(_translate("MainWindow", "恢复默认缩放"))
self.action_36.setShortcut(_translate("MainWindow", "Ctrl+0"))
``` 这样直接贴代码还不如画一个图给人家看, 然后写上要求 . 只能给你说思路.
首先点击文件->新建. 这个按钮要触发函数. 然槽函数开始执行响应, 这个槽函数就需要写上你想实现的业务代码. 比如更新富文本框(使用组件的相关方法). 最后封装
self.action.connect(self.on_newFile)
这样试试吧
我写的pyqt小程序一般都是自己用代码画界面, 大的软件对于python来说启动挺慢的. pyqtdesigner用的少一些 处女-大龙猫 发表于 2020-6-6 00:04
我写的pyqt小程序一般都是自己用代码画界面, 大的软件对于python来说启动挺慢的. pyqtdesigner用的少一些
TK和PYQT都是可以写Python的GUI吗?哪个更好一些,谢谢 处女-大龙猫 发表于 2020-6-6 00:03
这样直接贴代码还不如画一个图给人家看, 然后写上要求 . 只能给你说思路.
首先点击文件->新建. 这个按钮 ...
因为是模仿记事本,所以觉得大家应该都挺熟的,就没有画图
然后就是信号与槽我都已经写了,问题就是写了之后还是没有反应
class MyNotepad(QMainWindow, Ui_MainWindow):
resized = QtCore.pyqtSignal()
def __init__(self, parent=None):
super(MyNotepad, self).__init__(parent=parent)
self.setupUi(self)
self.action.triggered.connect(self.on_newFile)#新建菜单的信号与槽的连接
self.resized.connect(self.adjustTextEditSize)
self.setting()
def resizeEvent(self, event):
self.resized.emit()
return super(MyNotepad, self).resizeEvent(event)
def setting(self):
pass
def on_newFile(self):#新建对应的槽函数
self.textEdit.setText('create a new file')
def adjustTextEditSize(self):
self.textEdit.resize(self.width, self.height-23)
如果改成您写的self.action.connect(self.on_newFile)的话,会直接报错
大兵马元帅 发表于 2020-6-6 09:15
TK和PYQT都是可以写Python的GUI吗?哪个更好一些,谢谢
qt更好用一些, 可以说更强大一些吧, 我有一些学习网站. 当时开始学的时候资源好少, 现在比较多了 笙若 发表于 2020-6-6 09:15
因为是模仿记事本,所以觉得大家应该都挺熟的,就没有画图
然后就是信号与槽我都已经写了,问题就是写了 ...
菜单栏的触发或许有一点不一样. 刚开始学我也是学的菜单栏, 发现后来写小程序菜单栏用的少, 一般我都写成按钮了.
我一般是用按钮处理, 菜单栏应该也差不多, 只不过需要你在查一下.
笙若 发表于 2020-6-6 09:15
因为是模仿记事本,所以觉得大家应该都挺熟的,就没有画图
然后就是信号与槽我都已经写了,问题就是写了 ...
这个action动作和响应我不太熟悉.
反正思想是主要的, 比如点击了按钮首先干嘛再干嘛, 连成一条线就行了
页:
[1]