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_())
评论
  • aumujun
    aumujun 回复

    不要修改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_())
    

    enter image description here