python - PyQt5 | 我不明白我的功能是否有效
问题描述
当您单击 toNextPage 和 toPreviousPage 按钮时,会出现一个窗口,其中的某些内容会发生变化。
我试图通过每个“页面”的功能来实现这一点。也就是说,窗口、2 个按钮和“标题”必须保留在原位。在按钮和“标题”之间有一个地方会出现功能中描述的内容。这个函数在代码中被描述为“page_1”但是当你点击调用这个函数的“toNextPage”按钮时,窗口中没有任何变化。
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_FirstTheme(object):
def setupUi(self, FirstTheme):
FirstTheme.setObjectName("FirstTheme")
FirstTheme.resize(600, 700)
FirstTheme.setMinimumSize(QtCore.QSize(600, 700))
FirstTheme.setMaximumSize(QtCore.QSize(600, 700))
icon = QtGui.QIcon.fromTheme("icon.ico")
FirstTheme.setWindowIcon(icon)
FirstTheme.setStyleSheet("background-color: #070506;\n"
"color: grey;\n"
"")
self.centralwidget = QtWidgets.QWidget(FirstTheme)
self.centralwidget.setObjectName("centralwidget")
FirstTheme.setCentralWidget(self.centralwidget)
QtCore.QMetaObject.connectSlotsByName(FirstTheme)
FirstTheme.setWindowTitle("1.Знайомство з Python")
#This is variable with number of page
self.pagination = 1
#This is image (space) where situated the topic of theme
self.header = QtWidgets.QLabel(self.centralwidget)
self.header.setGeometry(QtCore.QRect(0, 0, 600, 103))
self.header.setStyleSheet("image: url(:/images/bg-header.jpg)")
self.header.setText("")
self.header.setObjectName("header")
#This is topic of the theme.
self.ThemeName = QtWidgets.QLabel(self.centralwidget)
self.ThemeName.setGeometry(QtCore.QRect(39, 21, 522, 60))
font = QtGui.QFont()
font.setFamily("Arial Black")
font.setPointSize(18)
font.setBold(True)
font.setWeight(75)
self.ThemeName.setFont(font)
self.ThemeName.setStyleSheet("QLabel#ThemeName\n"
"{\n"
"color: #fed346;\n"
"background:none;\n"
"}")
self.ThemeName.setObjectName("ThemeName")
self.ThemeName.setText("1.Знайомство з мовою програмування\n"
" Python")
#This is pushbutton. She may change the text and images on widget to Next theme
self.toNextTheme = QtWidgets.QPushButton(self.centralwidget)
self.toNextTheme.setGeometry(QtCore.QRect(310, 662, 100, 25))
#This is font settings for text of this pushButton
font = QtGui.QFont()
font.setFamily("Arial Black")
font.setBold(True)
font.setWeight(75)
self.toNextTheme.setFont(font)
#This is css for NextPuchButton
self.toNextTheme.setStyleSheet("QPushButton#toNextTheme\n"
"{\n"
" background-color: #225765;\n"
"color: #fed346;\n"
"border-top-right-radius: 5px;\n"
"border-bottom-right-radius: 5px;\n"
"}\n"
"\n"
"QPushButton:hover#toNextTheme\n"
"{\n"
" background-color: #3674a5;\n"
"}")
self.toNextTheme.setObjectName("toNextTheme")
self.toNextTheme.setText("Далі")
#This is pushButton. She is change the text on widget to previous theme
self.toPreviousTheme = QtWidgets.QPushButton(self.centralwidget)
self.toPreviousTheme.setEnabled(True)
self.toPreviousTheme.setGeometry(QtCore.QRect(190, 662, 100, 25))
font = QtGui.QFont()
font.setFamily("Arial Black")
font.setBold(True)
font.setWeight(75)
self.toPreviousTheme.setFont(font)
self.toPreviousTheme.setStyleSheet("QPushButton#toPreviousTheme\n"
"{\n"
" background-color: #225765;\n"
"color: #fed346;\n"
"border-top-left-radius: 5px;\n"
"border-bottom-left-radius: 5px;\n"
"}\n"
"\n"
"QPushButton:hover#toPreviousTheme\n"
"{\n"
" background-color: #3674a5;\n"
"}")
self.toPreviousTheme.setObjectName("toPreviousTheme")
self.toPreviousTheme.setText("Назад")
####################################################################################
############################### CONTENT ####################################
####################################################################################
def page_1(self):
#This is topic for this label (1st paragraph)
self.P1 = QtWidgets.QLabel(self.centralwidget)
self.P1.setGeometry(QtCore.QRect(10, 110, 281, 16))
font = QtGui.QFont()
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.P1.setFont(font)
self.P1.setStyleSheet("background-color: none;")
self.P1.setObjectName("P1")
self.P1.setText("Коротка історична довідка")
#This is Label with text-content forwarded to 1st paragraph.
self.textToP1 = QtWidgets.QLabel(self.centralwidget)
self.textToP1.setGeometry(QtCore.QRect(10, 135, 601, 201))
font = QtGui.QFont()
font.setPointSize(10)
self.textToP1.setFont(font)
self.textToP1.setStyleSheet("background-color: none;\n"
"")
self.textToP1.setTextFormat(QtCore.Qt.PlainText)
self.textToP1.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
self.textToP1.setObjectName("textToP1")
self.textToP1.setText("Мова програмування Python була створена до 1991 року голландцем Гвідо ван Россум.\n"
"Своє ім\'я - Пайтон (або Пітон) - отримала від назви телесеріалу, а не плазуна.\n"
"Після того, як Россум розробив мову, він виклав його в Інтернет, де спільнота програмістів\n"
"приєдналося до його поліпшення.\n"
"Python активно розвивається в даний час. Часто виходять нові версії.\n"
" Існують дві підтримувані гілки: Python 2.x і Python 3.x. Тут англійською \n"
"буквою \"x\" позначається конкретний реліз. Між другим і третім Пітоном є невелика різниця. \n"
"\n"
"В даному курсі за основу береться Python 3.x.\n"
"Офіційний сайт підтримки мови - https://www.python.org.")
#This is topic for second label (2nd paragraph)
self.P2 = QtWidgets.QLabel(self.centralwidget)
self.P2.setGeometry(QtCore.QRect(10, 300, 281, 16))
font = QtGui.QFont()
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.P2.setFont(font)
self.P2.setStyleSheet("background-color: none;")
self.P2.setObjectName("P2")
self.P2.setText("Основні особливості мови")
#This is Label with text-content forwarded to 2nd paragraph.
self.textToP2 = QtWidgets.QLabel(self.centralwidget)
self.textToP2.setGeometry(QtCore.QRect(10, 320, 601, 311))
font = QtGui.QFont()
font.setPointSize(10)
self.textToP2.setFont(font)
self.textToP2.setStyleSheet("background-color: none;\n"
"")
self.textToP2.setTextFormat(QtCore.Qt.PlainText)
self.textToP2.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
self.textToP2.setObjectName("textToP2")
self.textToP2.setText("Python - інтерпретована мова програмування. Це означає, що вихідний код частинами\n"
"перетворюється в машинний в процесі його читання спеціальною програмою - інтерпретатором.\n"
"\n"
"Python характеризується ясним синтаксисом. Читати код на ньому легше, ніж на інших мовах\n"
"програмування, т. К. В Пітоні мало використовуються такі допоміжні синтаксичні елементи як \n"
"дужки, крапки з комою. З іншого боку, правила мови змушують програмістів робити \n"
"відступи для позначення вкладених конструкцій. Зрозуміло, що добре оформлений текст \n"
"з малою кількістю відволікаючих елементів читати і розуміти легше.\n"
"\n"
"Python - це повноціннa багато в чому універсальна мова програмування, що використовується в \n"
"різних сферах. Основна, але не єдина, підтримувана їм парадигма, - \n"
"об\'єктно-орієнтоване програмування. Однак в даному курсі ми тільки згадаємо про об\'єкти, \n"
"а будемо вивчати структурне програмування, так як воно є базою. Без знання основних \n"
"типів даних, розгалужень, циклів, функцій немає сенсу вивчати більш складні \n"
"парадигми, т. я. В них все це використовується.\n"
"\n"
"Інтерпретатори Python поширюється вільно на підставі ліцензії подібної \n"
"GNU General Public License.")
#########################################################################################
########################## FOR BUTTONS ################################
#########################################################################################
#################### ФУНКЦИОНАЛ ДЛЯ СМЕНЫ КОНТЕНТА ##########################
#########################################################################################
#self.toNextTheme.clicked.connect()
self.toNextTheme.clicked.connect(self.page_1)
import source_rc
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
FirstTheme = QtWidgets.QMainWindow()
ui = Ui_FirstTheme()
ui.setupUi(FirstTheme)
FirstTheme.show()
sys.exit(app.exec_())
解决方案
不要修改 Qt Designer 生成的代码,而是创建另一个继承自相应小部件的类并使用初始类来填充它。
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_FirstTheme(object):
def setupUi(self, FirstTheme):
FirstTheme.setObjectName("FirstTheme")
FirstTheme.resize(600, 700)
FirstTheme.setMinimumSize(QtCore.QSize(600, 700))
FirstTheme.setMaximumSize(QtCore.QSize(600, 700))
icon = QtGui.QIcon.fromTheme("icon.ico")
FirstTheme.setWindowIcon(icon)
FirstTheme.setStyleSheet("background-color: #070506;\n"
"color: grey;\n"
"")
self.centralwidget = QtWidgets.QWidget(FirstTheme)
self.centralwidget.setObjectName("centralwidget")
FirstTheme.setCentralWidget(self.centralwidget)
QtCore.QMetaObject.connectSlotsByName(FirstTheme)
FirstTheme.setWindowTitle("1.Знайомство з Python")
#This is variable with number of page
self.pagination = 1
#This is image (space) where situated the topic of theme
self.header = QtWidgets.QLabel(self.centralwidget)
self.header.setGeometry(QtCore.QRect(0, 0, 600, 103))
self.header.setStyleSheet("image: url(lena.jpg)") # !!!
self.header.setText("")
self.header.setObjectName("header")
#This is topic of the theme.
self.ThemeName = QtWidgets.QLabel(self.centralwidget)
self.ThemeName.setGeometry(QtCore.QRect(39, 21, 522, 60))
font = QtGui.QFont()
font.setFamily("Arial Black")
font.setPointSize(18)
font.setBold(True)
font.setWeight(75)
self.ThemeName.setFont(font)
self.ThemeName.setStyleSheet("QLabel#ThemeName\n"
"{\n"
"color: #fed346;\n"
"background:none;\n"
"}")
self.ThemeName.setObjectName("ThemeName")
self.ThemeName.setText("1.Знайомство з мовою програмування\n"
" Python")
#This is pushbutton. She may change the text and images on widget to Next theme
self.toNextTheme = QtWidgets.QPushButton(self.centralwidget)
self.toNextTheme.setGeometry(QtCore.QRect(310, 662, 100, 25))
#This is font settings for text of this pushButton
font = QtGui.QFont()
font.setFamily("Arial Black")
font.setBold(True)
font.setWeight(75)
self.toNextTheme.setFont(font)
#This is css for NextPuchButton
self.toNextTheme.setStyleSheet("QPushButton#toNextTheme\n"
"{\n"
" background-color: #225765;\n"
"color: #fed346;\n"
"border-top-right-radius: 5px;\n"
"border-bottom-right-radius: 5px;\n"
"}\n"
"\n"
"QPushButton:hover#toNextTheme\n"
"{\n"
" background-color: #3674a5;\n"
"}")
self.toNextTheme.setObjectName("toNextTheme")
self.toNextTheme.setText("Далі")
#This is pushButton. She is change the text on widget to previous theme
self.toPreviousTheme = QtWidgets.QPushButton(self.centralwidget)
self.toPreviousTheme.setEnabled(True)
self.toPreviousTheme.setGeometry(QtCore.QRect(190, 662, 100, 25))
font = QtGui.QFont()
font.setFamily("Arial Black")
font.setBold(True)
font.setWeight(75)
self.toPreviousTheme.setFont(font)
self.toPreviousTheme.setStyleSheet("QPushButton#toPreviousTheme\n"
"{\n"
" background-color: #225765;\n"
"color: #fed346;\n"
"border-top-left-radius: 5px;\n"
"border-bottom-left-radius: 5px;\n"
"}\n"
"\n"
"QPushButton:hover#toPreviousTheme\n"
"{\n"
" background-color: #3674a5;\n"
"}")
self.toPreviousTheme.setObjectName("toPreviousTheme")
self.toPreviousTheme.setText("Назад")
#self.toNextTheme.clicked.connect()
# self.toNextTheme.clicked.connect(self.page_1)
# import source_rc # !!!
class ExampleApp(QtWidgets.QMainWindow, Ui_FirstTheme): # +++
def __init__(self, parent=None): # +++
super(ExampleApp, self).__init__(parent) # +++
self.setupUi(self) # +++
#self.toNextTheme.clicked.connect()
self.toNextTheme.clicked.connect(self.page_1) # +++
### CONTENT ###
def page_1(self):
print('#This is topic for this label (1st paragraph)')
self.P1 = QtWidgets.QLabel(self.centralwidget)
self.P1.setGeometry(QtCore.QRect(10, 110, 281, 16))
font = QtGui.QFont()
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.P1.setFont(font)
self.P1.setStyleSheet("background-color: none;")
self.P1.setObjectName("P1")
self.P1.setText("Коротка історична довідка")
#This is Label with text-content forwarded to 1st paragraph.
self.textToP1 = QtWidgets.QLabel(self.centralwidget)
self.textToP1.setGeometry(QtCore.QRect(10, 135, 601, 201))
font = QtGui.QFont()
font.setPointSize(10)
self.textToP1.setFont(font)
self.textToP1.setStyleSheet("background-color: none;\n"
"")
self.textToP1.setTextFormat(QtCore.Qt.PlainText)
self.textToP1.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
self.textToP1.setObjectName("textToP1")
self.textToP1.setText("Мова програмування Python була створена до 1991 року голландцем Гвідо ван Россум.\n"
"Своє ім\'я - Пайтон (або Пітон) - отримала від назви телесеріалу, а не плазуна.\n"
"Після того, як Россум розробив мову, він виклав його в Інтернет, де спільнота програмістів\n"
"приєдналося до його поліпшення.\n"
"Python активно розвивається в даний час. Часто виходять нові версії.\n"
" Існують дві підтримувані гілки: Python 2.x і Python 3.x. Тут англійською \n"
"буквою \"x\" позначається конкретний реліз. Між другим і третім Пітоном є невелика різниця. \n"
"\n"
"В даному курсі за основу береться Python 3.x.\n"
"Офіційний сайт підтримки мови - https://www.python.org.")
#This is topic for second label (2nd paragraph)
self.P2 = QtWidgets.QLabel(self.centralwidget)
self.P2.setGeometry(QtCore.QRect(10, 300, 281, 16))
font = QtGui.QFont()
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.P2.setFont(font)
self.P2.setStyleSheet("background-color: none;")
self.P2.setObjectName("P2")
self.P2.setText("Основні особливості мови")
#This is Label with text-content forwarded to 2nd paragraph.
self.textToP2 = QtWidgets.QLabel(self.centralwidget)
self.textToP2.setGeometry(QtCore.QRect(10, 320, 601, 311))
font = QtGui.QFont()
font.setPointSize(10)
self.textToP2.setFont(font)
self.textToP2.setStyleSheet("background-color: none;\n"
"")
self.textToP2.setTextFormat(QtCore.Qt.PlainText)
self.textToP2.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
self.textToP2.setObjectName("textToP2")
self.textToP2.setText("Python - інтерпретована мова програмування. Це означає, що вихідний код частинами\n"
"перетворюється в машинний в процесі його читання спеціальною програмою - інтерпретатором.\n"
"\n"
"Python характеризується ясним синтаксисом. Читати код на ньому легше, ніж на інших мовах\n"
"програмування, т. К. В Пітоні мало використовуються такі допоміжні синтаксичні елементи як \n"
"дужки, крапки з комою. З іншого боку, правила мови змушують програмістів робити \n"
"відступи для позначення вкладених конструкцій. Зрозуміло, що добре оформлений текст \n"
"з малою кількістю відволікаючих елементів читати і розуміти легше.\n"
"\n"
"Python - це повноціннa багато в чому універсальна мова програмування, що використовується в \n"
"різних сферах. Основна, але не єдина, підтримувана їм парадигма, - \n"
"об\'єктно-орієнтоване програмування. Однак в даному курсі ми тільки згадаємо про об\'єкти, \n"
"а будемо вивчати структурне програмування, так як воно є базою. Без знання основних \n"
"типів даних, розгалужень, циклів, функцій немає сенсу вивчати більш складні \n"
"парадигми, т. я. В них все це використовується.\n"
"\n"
"Інтерпретатори Python поширюється вільно на підставі ліцензії подібної \n"
"GNU General Public License.")
self.P1.show() # +++
self.textToP1.show() # +++
self.P2.show() # +++
self.textToP2.show() # +++
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
# FirstTheme = QtWidgets.QMainWindow()
# ui = Ui_FirstTheme()
# ui.setupUi(FirstTheme)
# FirstTheme.show()
w = ExampleApp()
w.show()
sys.exit(app.exec_())
推荐阅读
- sql-server - SQL:从选择中排除某些条件
- python - 在 powershell 中处理 python 3 unicode 输出 - 可以干净地完成吗?
- java - 如何使素数测试接受大数
- lua - 如何在lua中向零舍入
- forms - 选择下拉字段的语义 UI 自定义规则验证
- c# - 为什么我的字符串没有被双等号验证,并且字符没有被追加到末尾
- python - Pygame 屏幕循环返回
- php - 发布请求在邮递员中工作,但不在 ajax 中,给出 405 方法未找到错误
- reactjs - Uncaught SyntaxError: Unexpected token '!' reactjs mainchunk.js
- unity3d - Unity UIElemens 在代码中更改 style.cursor