在PyQt6上绘图。

huangapple go评论149阅读模式
英文:

plotting on PyQt6

问题

这是您提供的代码的翻译部分:

  1. 我之前在这里写过但我删除了问题因为没有具体信息现在我会重新提出
  2. 我有一个使用PyQt6开发的应用程序它包含三个用于切换的按钮如果您单击2按钮将显示两个带有2标签的页面类似于3按钮问题是第一页应该显示一个绘图但我遇到了以下错误
  3. `AttributeError: 'QWidget' object has no attribute 'plot'。`
  4. 我对面向对象编程还不太擅长所以我不太明白如何修复它我使用pyqtgraph库进行绘图
  5. Qt Designer生成的代码
  6. 这是我编写的逻辑代码
  7. ```python
  8. import sys
  9. from PyQt6 import QtWidgets, QtGui, QtCore
  10. from untdwdfd import Ui_MainWindow
  11. from pyqtgraph import PlotWidget
  12. import pyqtgraph as pg
  13. class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
  14. def __init__(self):
  15. super().__init__()
  16. self.setupUi(self)
  17. QtCore.QMetaObject.connectSlotsByName(self)
  18. self.pizdec.plot([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
  19. @QtCore.pyqtSlot()
  20. def on_pushButton_clicked(self):
  21. self.graph.setCurrentIndex(0)
  22. @QtCore.pyqtSlot()
  23. def on_pushButton_3_clicked(self):
  24. self.graph.setCurrentIndex(1)
  25. @QtCore.pyqtSlot()
  26. def on_pushButton_2_clicked(self):
  27. self.graph.setCurrentIndex(2)
  28. if __name__ == '__main__':
  29. app = QtWidgets.QApplication(sys.argv)
  30. window = MainWindow()
  31. window.show()
  32. sys.exit(app.exec())

如果您有其他问题或需要进一步的帮助,请随时提问。

英文:

I already wrote here before, but I deleted the question, because there were no specifics. Now I'll bring it in.
I have an application that I have developed in PyQt6. It contains three buttons for switching: if you click on the " 2 page" button, there will be 2 pages with the inscription 2 page and similarly with the "3 page" button. The question is: page 1 should display a plot, in the pizdec area, however I get the following error:
AttributeError: 'QWidget' object has no attribute 'plot'.

I'm not really good at OOP yet, so I don't quite understand how to fix it. For plotting i use pyqtgraph library.
Code generated by Qt Designer.

  1. from PyQt6 import QtCore, QtGui, QtWidgets
  2. class Ui_MainWindow(object):
  3. def setupUi(self, MainWindow):
  4. MainWindow.setObjectName("MainWindow")
  5. MainWindow.setEnabled(True)
  6. MainWindow.resize(1495, 788)
  7. sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred)
  8. sizePolicy.setHorizontalStretch(0)
  9. sizePolicy.setVerticalStretch(0)
  10. sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
  11. MainWindow.setSizePolicy(sizePolicy)
  12. MainWindow.setStyleSheet("\n"
  13. "background-color: rgb(222, 222, 222);")
  14. self.centralwidget = QtWidgets.QWidget(parent=MainWindow)
  15. self.centralwidget.setObjectName("centralwidget")
  16. self.frame = QtWidgets.QFrame(parent=self.centralwidget)
  17. self.frame.setGeometry(QtCore.QRect(0, 0, 131, 761))
  18. self.frame.setStyleSheet("background-color: rgb(21, 21, 21);")
  19. self.frame.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
  20. self.frame.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
  21. self.frame.setObjectName("frame")
  22. self.verticalLayoutWidget = QtWidgets.QWidget(parent=self.frame)
  23. self.verticalLayoutWidget.setGeometry(QtCore.QRect(10, 80, 111, 261))
  24. self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
  25. self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
  26. self.verticalLayout.setContentsMargins(0, 0, 0, 0)
  27. self.verticalLayout.setObjectName("verticalLayout")
  28. self.pushButton = QtWidgets.QPushButton(parent=self.verticalLayoutWidget)
  29. sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
  30. sizePolicy.setHorizontalStretch(0)
  31. sizePolicy.setVerticalStretch(0)
  32. sizePolicy.setHeightForWidth(self.pushButton.sizePolicy().hasHeightForWidth())
  33. self.pushButton.setSizePolicy(sizePolicy)
  34. self.pushButton.setStyleSheet("border: 0px solid;\n"
  35. "color: rgb(255, 255, 255);\n"
  36. "")
  37. self.pushButton.setObjectName("pushButton")
  38. self.verticalLayout.addWidget(self.pushButton)
  39. self.pushButton_3 = QtWidgets.QPushButton(parent=self.verticalLayoutWidget)
  40. sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
  41. sizePolicy.setHorizontalStretch(0)
  42. sizePolicy.setVerticalStretch(0)
  43. sizePolicy.setHeightForWidth(self.pushButton_3.sizePolicy().hasHeightForWidth())
  44. self.pushButton_3.setSizePolicy(sizePolicy)
  45. self.pushButton_3.setStyleSheet("border: 0px solid;\n"
  46. "color: rgb(255, 255, 255);")
  47. self.pushButton_3.setObjectName("pushButton_3")
  48. self.verticalLayout.addWidget(self.pushButton_3)
  49. self.pushButton_2 = QtWidgets.QPushButton(parent=self.verticalLayoutWidget)
  50. sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding)
  51. sizePolicy.setHorizontalStretch(0)
  52. sizePolicy.setVerticalStretch(0)
  53. sizePolicy.setHeightForWidth(self.pushButton_2.sizePolicy().hasHeightForWidth())
  54. self.pushButton_2.setSizePolicy(sizePolicy)
  55. self.pushButton_2.setStyleSheet("border: 0px solid;\n"
  56. "color: rgb(255, 255, 255);")
  57. self.pushButton_2.setObjectName("pushButton_2")
  58. self.verticalLayout.addWidget(self.pushButton_2)
  59. self.frame_2 = QtWidgets.QFrame(parent=self.centralwidget)
  60. self.frame_2.setGeometry(QtCore.QRect(130, 0, 1371, 31))
  61. self.frame_2.setStyleSheet("background-color: rgb(25, 25, 25);")
  62. self.frame_2.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
  63. self.frame_2.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
  64. self.frame_2.setObjectName("frame_2")
  65. self.frame_3 = QtWidgets.QFrame(parent=self.centralwidget)
  66. self.frame_3.setGeometry(QtCore.QRect(130, 30, 1371, 731))
  67. self.frame_3.setStyleSheet("background-color: rgb(71, 71, 71);\n"
  68. "background-color: rgb(34, 34, 34);")
  69. self.frame_3.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
  70. self.frame_3.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
  71. self.frame_3.setObjectName("frame_3")
  72. self.graph = QtWidgets.QStackedWidget(parent=self.frame_3)
  73. self.graph.setGeometry(QtCore.QRect(0, 10, 1361, 721))
  74. self.graph.setObjectName("graph")
  75. self.page = QtWidgets.QWidget()
  76. self.page.setObjectName("page")
  77. self.pizdec = QtWidgets.QWidget(parent=self.page)
  78. self.pizdec.setGeometry(QtCore.QRect(70, 20, 1231, 441))
  79. self.pizdec.setObjectName("pizdec")
  80. self.graph.addWidget(self.page)
  81. self.page_2 = QtWidgets.QWidget()
  82. self.page_2.setObjectName("page_2")
  83. self.label_2 = QtWidgets.QLabel(parent=self.page_2)
  84. self.label_2.setGeometry(QtCore.QRect(210, 100, 831, 401))
  85. font = QtGui.QFont()
  86. font.setPointSize(80)
  87. self.label_2.setFont(font)
  88. self.label_2.setObjectName("label_2")
  89. self.graph.addWidget(self.page_2)
  90. self.page_3 = QtWidgets.QWidget()
  91. self.page_3.setObjectName("page_3")
  92. self.label_3 = QtWidgets.QLabel(parent=self.page_3)
  93. self.label_3.setGeometry(QtCore.QRect(300, 100, 831, 401))
  94. font = QtGui.QFont()
  95. font.setPointSize(80)
  96. self.label_3.setFont(font)
  97. self.label_3.setObjectName("label_3")
  98. self.graph.addWidget(self.page_3)
  99. self.frame_3.raise_()
  100. self.frame.raise_()
  101. self.frame_2.raise_()
  102. MainWindow.setCentralWidget(self.centralwidget)
  103. self.menubar = QtWidgets.QMenuBar(parent=MainWindow)
  104. self.menubar.setGeometry(QtCore.QRect(0, 0, 1495, 26))
  105. self.menubar.setObjectName("menubar")
  106. self.menuw3rrewd = QtWidgets.QMenu(parent=self.menubar)
  107. self.menuw3rrewd.setObjectName("menuw3rrewd")
  108. MainWindow.setMenuBar(self.menubar)
  109. self.menubar.addAction(self.menuw3rrewd.menuAction())
  110. self.retranslateUi(MainWindow)
  111. self.graph.setCurrentIndex(0)
  112. QtCore.QMetaObject.connectSlotsByName(MainWindow)
  113. def retranslateUi(self, MainWindow):
  114. _translate = QtCore.QCoreApplication.translate
  115. MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
  116. self.pushButton.setText(_translate("MainWindow", "1 page"))
  117. self.pushButton_3.setText(_translate("MainWindow", "2 page"))
  118. self.pushButton_2.setText(_translate("MainWindow", "3 page"))
  119. self.label_2.setText(_translate("MainWindow", "2 page"))
  120. self.label_3.setText(_translate("MainWindow", "3 page"))
  121. self.menuw3rrewd.setTitle(_translate("MainWindow", "w3rrewd"))
  122. if __name__ == "__main__":
  123. import sys
  124. app = QtWidgets.QApplication(sys.argv)
  125. MainWindow = QtWidgets.QMainWindow()
  126. ui = Ui_MainWindow()
  127. ui.setupUi(MainWindow)
  128. MainWindow.show()
  129. sys.exit(app.exec())

Here's the logic code I wrote.

  1. import sys
  2. from PyQt6 import QtWidgets, QtGui, QtCore
  3. from untdwdfd import Ui_MainWindow
  4. from pyqtgraph import PlotWidget
  5. import pyqtgraph as pg
  6. class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
  7. def __init__(self):
  8. super().__init__()
  9. self.setupUi(self)
  10. QtCore.QMetaObject.connectSlotsByName(self)
  11. self.pizdec.plot([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
  12. @QtCore.pyqtSlot()
  13. def on_pushButton_clicked(self):
  14. self.graph.setCurrentIndex(0)
  15. @QtCore.pyqtSlot()
  16. def on_pushButton_3_clicked(self):
  17. self.graph.setCurrentIndex(1)
  18. @QtCore.pyqtSlot()
  19. def on_pushButton_2_clicked(self):
  20. self.graph.setCurrentIndex(2)
  21. if __name__ == '__main__':
  22. app = QtWidgets.QApplication(sys.argv)
  23. window = MainWindow()
  24. window.show()
  25. sys.exit(app.exec())

image 1

image 2
image 3

答案1

得分: 0

If you look at your UI file you might notice that self.pizdec is defined as a QWidget.

如果你查看你的 UI 文件,你可能会注意到 self.pizdec 被定义为一个 QWidget

And then in your logic file you are calling:

然后在你的逻辑文件中,你调用了:

You are receiving the error because QWidget doesn't have a plot method.

你收到了错误,因为 QWidget 没有 plot 方法。

You technically shouldn't edit the uic files, so what you can do is edit your UI in designer and leave an empty space where self.pizdec is and then add the widget in your logic file.

从技术上讲,你不应该编辑 uic 文件,所以你可以在设计师中编辑你的 UI,在 self.pizdec 的位置留出一个空白空间,然后在你的逻辑文件中添加小部件。

For example:

例如:

  1. import sys
  2. from PyQt6 import QtWidgets, QtGui, QtCore
  3. from untdwdfd import Ui_MainWindow
  4. from pyqtgraph import PlotWidget
  5. import pyqtgraph as pg
  6. class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
  7. def __init__(self):
  8. super().__init__()
  9. self.setupUi(self)
  10. QtCore.QMetaObject.connectSlotsByName(self)
  11. self.pizdec = PlotWidget(parent=self.page)
  12. self.pizdec.setGeometry(QtCore.QRect(70, 20, 1231, 441))
  13. self.pizdec.setObjectName("pizdec")
  14. self.pizdec.plot([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
  15. @QtCore.pyqtSlot()
  16. def on_pushButton_clicked(self):
  17. self.graph.setCurrentIndex(0)
  18. @QtCore.pyqtSlot()
  19. def on_pushButton_3_clicked(self):
  20. self.graph.setCurrentIndex(1)
  21. @QtCore.pyqtSlot()
  22. def on_pushButton_2_clicked(self):
  23. self.graph.setCurrentIndex(2)
  24. if __name__ == '__main__':
  25. app = QtWidgets.QApplication(sys.argv)
  26. window = MainWindow()
  27. window.show()
  28. sys.exit(app.exec())

在PyQt6上绘图。

  1. [![在此输入图像描述][1]][1]
  2. <details>
  3. <summary>英文:</summary>
  4. If you look at your `UI` file you might notice that `self.pizdec` is defined as a `QWidget`.

#line 80ish
self.pizdec = QtWidgets.QWidget(parent=self.page)
self.pizdec.setGeometry(QtCore.QRect(70, 20, 1231, 441))
self.pizdec.setObjectName("pizdec")

  1. And then in your logic file you are calling:

self.pizdec.plot([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

  1. You are receiving the error because `QWidget` doesn&#39;t have a `plot` method.
  2. You technically shouldn&#39;t edit the uic files, so what you can do is edit your ui in designer and leave an empty space where `self.pizdec` is and then add the widget in your logic file.
  3. For example:

import sys
from PyQt6 import QtWidgets, QtGui, QtCore
from untdwdfd import Ui_MainWindow
from pyqtgraph import PlotWidget
import pyqtgraph as pg

class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def init(self):
super().init()
self.setupUi(self)

  1. QtCore.QMetaObject.connectSlotsByName(self)
  2. self.pizdec = QPlotWidget(parent=self.page)
  3. self.pizdec.setGeometry(QtCore.QRect(70, 20, 1231, 441))
  4. self.pizdec.setObjectName(&quot;pizdec&quot;)
  5. self.pizdec.plot([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
  6. @QtCore.pyqtSlot()
  7. def on_pushButton_clicked(self):
  8. self.graph.setCurrentIndex(0)
  9. @QtCore.pyqtSlot()
  10. def on_pushButton_3_clicked(self):
  11. self.graph.setCurrentIndex(1)
  12. @QtCore.pyqtSlot()
  13. def on_pushButton_2_clicked(self):
  14. self.graph.setCurrentIndex(2)

if name == 'main':
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())

  1. [![enter image description here][1]][1]
  2. [1]: https://i.stack.imgur.com/JwIgs.png
  3. </details>

huangapple
  • 本文由 发表于 2023年3月8日 16:28:20
  • 转载请务必保留本文链接:https://go.coder-hub.com/75670773.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定