当前位置: 首页 > 面试题库 >

QMainWindow中的布局错误?

尉迟龙光
2023-03-14
问题内容

我在PyQT5中布局错误。我究竟做错了什么?是否有一些预定义的小字段大小或类似的字段?我将主窗口创建为QMainWindow,并在其中创建了一个窗口小部件作为中央窗口小部件。它是这样的:

class Main(QWidget):
    """The main widget with label and LineEdit"""
    def __init__(self, parent=None):
        super().__init__(parent)
        self.initUi()

    def initUi(self):
        """Initialize the UI of the main widget"""
        self.mySourceLabel = QLabel("Select your file:")
        self.mySourceLine = QLineEdit()
        self.mySourceLine.setPlaceholderText("File name here")

        # Set layout
        grid = QGridLayout()
        #grid.setSpacing(5)
        grid.addWidget(self.mySourceLabel, 0, 0)
        grid.addWidget(self.mySourceLine, 1, 0)
        self.setLayout(grid)

class MyApp(QMainWindow):
    """Main application class"""
    def __init__(self, parent=None):
        super().__init__(parent)
        self.initUi()

    def initUi(self):
        """Initialize UI of an application"""
        # main window size, title
        self.setGeometry(400, 300, 400, 300)
        self.setWindowTitle("Version upgrade ")

        # create instance of a class Main
        self.main = Main(self)

        # create central widget, create grid layout
        centralWidget = QWidget()
        centralLayout = QGridLayout()
        centralWidget.setLayout(centralLayout)

问题答案:

当您将父级传递给QWidget时,它将相对于其父级定位一个位置,并生成与您所获得的控件类似的控件,以解决此问题,使用了布局,QMainWindow是一种特殊的QWidget,因为它具有预定义的元素,因此它已经具有布局

在QMainWindow中,必须使用setCentralWidget函数将小部件添加到centralwidget:

class MyApp(QMainWindow):
    """Main application class"""
    def __init__(self, parent=None):
        super().__init__(parent)
        self.initUi()

    def initUi(self):
        [...]
        centralWidget = Main(self)
        self.setCentralWidget(centralWidget)

完整的代码:

class Main(QWidget):
    """The main widget with label and LineEdit"""
    def __init__(self, parent=None):
        super().__init__(parent)
        self.initUi()

    def initUi(self):
        """Initialize the UI of the main widget"""
        self.mySourceLabel = QLabel("Select your file:")
        self.mySourceLine = QLineEdit()
        self.mySourceLine.setPlaceholderText("File name here")

        # Set layout
        grid = QGridLayout()
        #grid.setSpacing(5)
        grid.addWidget(self.mySourceLabel, 0, 0)
        grid.addWidget(self.mySourceLine, 1, 0)
        self.setLayout(grid)

class MyApp(QMainWindow):
    """Main application class"""
    def __init__(self, parent=None):
        super().__init__(parent)
        self.initUi()

    def initUi(self):
        """Initialize UI of an application"""
        # main window size, title
        self.setGeometry(400, 300, 400, 300)
        self.setWindowTitle("Version upgrade ")

        # create central widget, create grid layout
        centralWidget = Main(self)
        self.setCentralWidget(centralWidget)


 类似资料:
  • 我使用Android Studio2020.3.1补丁3和ConstraintLayout来显示两行UI。 以下是预期的UI Latyout: 您可以将test.xml复制到res/layout,在“code”视图中打开test.xml,然后单击“second_row_image_view”,最后切换到“design”视图,您还可以发现second_row_image_view浮动在first_r

  • 嘿我真的需要你的帮助。 我的问题是Android Studio不会在仿真器或物理设备中正确显示布局。每当我放置一个textView、button等,并且我想要将它居中(水平、垂直或两者),并且我启动仿真器时,它就会被贴在左上角。 这是我的代码:: 在showHint方法中,一切工作都很好。按钮和imageview就在我设置的地方。 但是在firstStage方法中,我有一个textView,如果我

  • 我知道线性布局中的布局权重。我可以在相对布局中分配布局权重吗? 示例:布局中的两个图像视图以60:40的比例填充布局。第一个图像应占据整个屏幕高度的60%,第二个图像必须占据剩余的40%屏幕。 不要只是回答这个例子的问题,请告诉我准确的概念,或者张贴一些关于相对布局中布局权重的参考链接。提前感谢。

  • 问题内容: 我是Android开发的新手,已经开始创建自己的UI。我看到您可以动态创建它,如下所示(Dynamic Layouts ): 但我也看到netbeans有一个文件 Resources- > layout-> main.xml 。因此,您可以为UI创建XML布局(声明XML布局): 所以我的问题是应该使用哪个?在Android开发中,对动态布局和XML布局有何建议和优缺点? 问题答案:

  • 有什么建议为什么我会在layout_behavior上出现这个错误,以及如何修复它?

  • 主要活动: } 片段类 错误:java.lang.runtimeException:无法启动活动ComponentInfo{com.darkweb.android.chroma2018/com.darkweb.android.chroma2018.mainactivity}:Android.view.filflateException:二进制XML文件行#0:错误inflating类在Androi

  • 我刚开始学习Kotlin for android开发,开始了一个空项目并添加了一个活动。正如Kotlin文档中所说,我已经添加了所需的gradle依赖项。默认情况下,MainActivity的xml文件只包含一个TextView。但是当我尝试在布局编辑器中预览xml时,它显示了一个“渲染错误” 我也知道了 我尝试过重建项目并手动刷新布局。但似乎什么都不管用。 那我该怎么办?我正在使用Android

  • 我们已经为网站的布局定义了看起来不错的样式,下面要把链接中使用的占位符 # 换成真正的链接地址。当然,我们可以像下面这样硬编码链接: <a href="/static_pages/about">About</a> 不过这样不太符合 Rails 之道。一者,“关于”页面的地址如果是 /about 而不是 /static_pages/about 就好了;再者,Rails 习惯使用具名路由指定链接地址