为什么我在主窗口中不能显示多个控件?

时间:2019-06-13 09:59:04

标签: python pyqt pyqt5

我使用pyqt5创建了两个自定义小部件。我想在主窗口中显示它们两个,但是问题是只有它们中的一个出现了。只有第二个数字创建的对象可见。

class Mainwindow(QtWidgets.QMainWindow):
     xfactor = 0.0
     yfactor = 0.0
     windetails = []

    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
        # Ui_MainWindow.__init__(self)
        # self.setupUi(self)
        self.setresolutionparams()
        self.setupobject()



    def setresolutionparams(self):
        desk = QtWidgets.QDesktopWidget()
        self.xfactor = desk.width()/1600.0;
        self.yfactor = desk.height()/900.0;
        print(self.xfactor)

    def setupobject(self):

        self.windetails.append((int)(1130 * self.xfactor))
        self.windetails.append((int)(732 * self.yfactor))
        self.windetails.append((int)(470 * self.xfactor))
        self.windetails.append((int)(160 * self.yfactor))
        pepwin_ = pepwin(self)
        pepwin_.setupwindow(self.windetails,self.xfactor,self.yfactor)
        pepwin_.setbtncnfg(3,3,self.windetails[2], self.windetails[3])
        pepwin_.settext(1,1,"Select\nFiles")
        pepwin_.settext(3, 3, "Exit")
        pepwin_.show()

        self.windetails.clear()
        self.windetails.append(0.0)
        self.windetails.append(0.0)
        self.windetails.append(1600.0 * self.xfactor)
        self.windetails.append(50.0 * self.yfactor)
        scrntitle_ = screentitle(self)
        scrntitle_.setupwindow(self.windetails, self.xfactor, self.yfactor)
        scrntitle_.show()

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = Mainwindow()
    window.setStyleSheet("background-color:black")
    window.showFullScreen()
    sys.exit(app.exec_())

2 个答案:

答案 0 :(得分:2)

如果小部件是窗口的子级,则将其放在其顶部,在您的情况下,第二个小部件将放置在第一个小部件的顶部。如果要显示两个窗口小部件不应重叠,则可能的解决方案是使用中央窗口小部件中设置的布局

# ...
def setupobject(self):
    self.windetails = [
        int(1130 * self.xfactor),
        int(732 * self.yfactor),
        int(470 * self.xfactor),
        int(160 * self.yfactor),
    ]
    pepwin_ = pepwin(self)
    pepwin_.setupwindow(self.windetails, self.xfactor, self.yfactor)
    pepwin_.setbtncnfg(3, 3, self.windetails[2], self.windetails[3])
    pepwin_.settext(1, 1, "Select\nFiles")
    pepwin_.settext(3, 3, "Exit")

    self.windetails = [0, 0, 1600.0 * self.xfactor, 50.0 * self.yfactor]
    scrntitle_ = screentitle(self)
    scrntitle_.setuowindow(self.windetails, self.xfactor, self.yfactor)

    centralwidget = QtWidgets.QWidget()
    self.setCentralWidget(centralwidget)
    lay = QtWidgets.QVBoxLayout(centralwidget)
    lay.addWidget(pepwin_)
    lay.addWidget(scrntitle_)
# ...

答案 1 :(得分:0)

来自official documentation of QDesktopWidget

  

屏幕几何

     

要获取特定屏幕的尺寸,请调用   screenGeometry()函数。在某些桌面环境中,并非全部   屏幕可供应用程序使用;例如,   应用程序底座或菜单栏可能会占用一些空间。使用   availableGeometry()函数来获取可用区域   应用程序。

     

QDesktopWidget还继承了QWidget属性,width()和   height(),它指定桌面的大小。但是,对于台式机   在多个屏幕上,桌面的大小是所有   屏幕尺寸,因此width()和height()不应用于计算   放置在其中一个屏幕上的小部件的大小。

因此,与其使用desk.width()desk.height()缩放小部件的几何形状,不如使用desk.screenGeometry().width()desk.screenGeometry().height()缩放它的几何形状。