我使用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_())
答案 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()
缩放它的几何形状。