简体   繁体   中英

adding and removing widgets in PyQt

What I'm doing is about that when I clicked the date of the calendar ,then it will display the class of UI_tab which is a tabwidget ,including two tabs.each tab includes some labels and others.However it cant't work.

from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Tab(object):

    # create tabwidget  
    def __init__(self,parentw,*args):
        print(args)
        print(parentw)
        super().__init__()
        self.font = QtGui.QFont()
        self.font.setFamily("仿宋")
        self.font.setPointSize(10)
        self.font.setItalic(False)
        self.font.setUnderline(False)
        self.w=['title0','title1',
                'creator0','creator1',
                'c_time0','c_time1',
                'user0','user1',
                'd_time0','d_time1',
                'detail0']
        self.wt=['title','creator','create_time',
                'viewer','finish_time','detail']
        self.tabWidget = QtWidgets.QTabWidget(parentw)
        self.tabWidget.setGeometry(QtCore.QRect(50, 10, 500, 2500))
        self.tabWidget.setMinimumSize(QtCore.QSize(400, 400))
        self.tabWidget.setTabsClosable(False)
        self.tabWidget.setMovable(True)
        self.tabWidget.setObjectName("tabWidget")
        self.initTab()


    # create tabs in tabwidget
    def initTab(self,tabnum=2):
        self.tabnum=tabnum
        print('inittab')
        self.tabs={}

        for i in range(self.tabnum):
            self.tabs[str(i)]=QtWidgets.QWidget()
            self.tabs[str(i)].setObjectName("tab"+str(i))
            self.tabWidget.addTab(self.tabs[str(i)], "")
            self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabs[str(i)]),str(i))
            self.initw_in_tab(self.tabs[str(i)])
        print(self.tabs)

    # add labels,textbrowser in tabs
    def initw_in_tab(self,parentw):
        w_in_tab={}
        print('initw_in_tab')

        for i in self.w:
            w_in_tab[i]=QtWidgets.QLabel(parentw)
            w_in_tab[i].setFont(self.font)
            w_in_tab[i].setLayoutDirection(QtCore.Qt.LeftToRight)
            w_in_tab[i].setAutoFillBackground(False)
            w_in_tab[i].setFrameShape(QtWidgets.QFrame.Box)
            w_in_tab[i].setFrameShadow(QtWidgets.QFrame.Raised)
            w_in_tab[i].setLineWidth(1)
            w_in_tab[i].setMidLineWidth(0)
            w_in_tab[i].setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
            w_in_tab[i].setIndent(3)
            w_in_tab[i].setObjectName(i)
            if self.w.index(i)%2 ==0:
                w_in_tab[i].setGeometry(QtCore.QRect(20, 180 + self.w.index(i)*25, 59, 25))
                w_in_tab[i].setText(self.wt[int(self.w.index(i)/2)])
            else:
                w_in_tab[i].setGeometry(QtCore.QRect(140, 180 +(self.w.index(i)-1)*25, 59, 25))

        scrollArea = QtWidgets.QScrollArea(parentw)
        scrollArea.setEnabled(True)
        scrollArea.setGeometry(QtCore.QRect(140, 7*25+180, 341, 440))
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(scrollArea.sizePolicy().hasHeightForWidth())
        scrollArea.setSizePolicy(sizePolicy)
        scrollArea.setMinimumSize(QtCore.QSize(200, 100))
        scrollArea.setWidgetResizable(True)
        scrollArea.setObjectName("scrollArea")
        scrollAreaWidgetContents_2 = QtWidgets.QWidget()
        scrollAreaWidgetContents_2.setGeometry(QtCore.QRect(0, 0, 322, 1600))
        scrollAreaWidgetContents_2.setMinimumSize(QtCore.QSize(200, 1600))
        scrollAreaWidgetContents_2.setObjectName("scrollAreaWidgetContents_2")
        detail2 = QtWidgets.QTextBrowser(scrollAreaWidgetContents_2)
        detail2.setGeometry(QtCore.QRect(0, 0, 321, 600))
        detail2.setMinimumSize(QtCore.QSize(296, 192))
        detail2.setObjectName("detail2")
        scrollArea.setWidget(scrollAreaWidgetContents_2)






class Ui_MainWindow(object):
     # setup main ui include calendar
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(997, 707)
        MainWindow.setStyleSheet("")
        self.centralWidget = QtWidgets.QWidget(MainWindow)
        self.centralWidget.setObjectName("centralWidget")
        self.centralWidget.setUpdatesEnabled(True)
        self.calendarw = QtWidgets.QWidget(self.centralWidget)
        self.calendarw.setGeometry(QtCore.QRect(560, 20, 361, 541))
        self.calendarw.setObjectName("calendarw")
        self.cal = QtWidgets.QCalendarWidget(self.calendarw)
        self.cal.setGeometry(QtCore.QRect(0, 60, 361, 481))
        self.cal.setFirstDayOfWeek(QtCore.Qt.Monday)
        self.cal.setObjectName("cal")
        self.cal_la = QtWidgets.QLabel(self.calendarw)
        self.cal_la.setGeometry(QtCore.QRect(110, 20, 161, 31))
        font = QtGui.QFont()
        font.setPointSize(22)
        self.cal_la.setFont(font)
        self.cal_la.setAlignment(QtCore.Qt.AlignCenter)
        self.cal_la.setObjectName("cal_la")
        MainWindow.setCentralWidget(self.centralWidget)
        MainWindow.setWindowTitle("MainWindow")
        self.cal_la.setText("calendar")
        #  
        #  Ui_Tab(self.centralWidget)    
        # this makes me confused,I hope that when I clicked the date of the
        #   calendar ,then it will display the class of UI_tab.However it 
        # cant't work.
        self.cal.clicked.connect(lambda x :Ui_Tab(self.centralWidget))
        QtCore.QMetaObject.connectSlotsByName(MainWindow)


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

when I use the below code , it exactly does what I want it to do, but without clicking the calendar date.

   Ui_Tab(self.centralWidget)  

instead of

    self.cal.clicked.connect(lambda x :Ui_Tab(self.centralWidget))

visit PyQt Window No Show

I just change the code below

      self.cal.clicked.connect(lambda x :Ui_Tab(self.centralWidget))

to

       self.cal.clicked.connect(Ui_Tab(self.centralWidget).show)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM