Почему я не могу показать более одного виджета в главном окне? - PullRequest
0 голосов
/ 13 июня 2019

Я создал два пользовательских виджета, используя 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 ]

2 голосов
/ 13 июня 2019

Когда виджет является сыном окна, он помещается поверх него, в вашем случае второй виджет помещается поверх первого.Если вы хотите, чтобы оба виджета не перекрывались, возможное решение - использовать макет, установленный в центральном виджете

# ...
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_)
# ...
0 голосов
/ 13 июня 2019

Из официальной документации QDesktopWidget:

Геометрия экрана

Чтобы получить размеры определенного экрана, вызовите Функция screenGeometry (). В некоторых средах рабочего стола не все экран доступен для использования приложениями; например, док-панель приложения или строка меню могут занимать некоторое место. Использовать Функция availableGeometry () для получения доступной области для приложения.

QDesktopWidget также наследует свойства QWidget, width () и height (), которые определяют размер рабочего стола. Однако для настольных компьютеров с несколькими экранами, размер рабочего стола является объединением всех размеры экрана, поэтому width () и height () не должны использоваться для вычислений размер виджета для размещения на одном из экранов.

Поэтому вместо масштабирования геометрии ваших виджетов с помощью desk.width() и desk.height() вы должны масштабировать ее с помощью desk.screenGeometry().width() и desk.screenGeometry().height().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...