Ppopulating tableview 覆盖其他 ui 个元素

Ppopulating tableview covers other ui elements

我的 QTableView 遇到了问题,因为它在用变量填充后阻挡了其他 Ui 元素。这是我的 Ui 设计

table视图填充后做什么(使用测试变量)

在 Designer 应用程序中设置 ui 时,我是否遗漏了什么?很抱歉新手问题,因为这是我第一次处理 tableviews.

填充table的代码:

    def createTable(self):
        # Create table
        header_labels = ['Username', 'Password', 'Account Type']
        profiles = [["test", "pokemon","nanana"], ["dreams", "nani","hikari"]]
        self.tableWidget = QTableWidget()
        self.tableWidget.setRowCount(len(profiles))
        self.tableWidget.setColumnCount(len(header_labels))

        self.tableWidget.setHorizontalHeaderLabels(header_labels)
        self.tableWidget.verticalHeader().setVisible(False)
        for i,profile in enumerate(profiles):
            self.tableWidget.setItem(i, 0, QTableWidgetItem(profile[0]))
            self.tableWidget.setItem(i, 1, QTableWidgetItem(profile[1]))
            self.tableWidget.setItem(i, 2, QTableWidgetItem(profile[2]))
        self.tableWidget.move(0, 0)

我的Ui代码(如需ui红色供参考)

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Form</class>
 <widget class="QWidget" name="Form">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>618</width>
    <height>463</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Form</string>
  </property>
  <widget class="QLabel" name="label">
   <property name="geometry">
    <rect>
     <x>20</x>
     <y>20</y>
     <width>161</width>
     <height>16</height>
    </rect>
   </property>
   <property name="font">
    <font>
     <family>Arial</family>
     <pointsize>12</pointsize>
    </font>
   </property>
   <property name="text">
    <string>Account Management</string>
   </property>
  </widget>
  <widget class="QWidget" name="horizontalLayoutWidget">
   <property name="geometry">
    <rect>
     <x>20</x>
     <y>50</y>
     <width>301</width>
     <height>194</height>
    </rect>
   </property>
   <layout class="QHBoxLayout" name="horizontalLayout">
    <property name="sizeConstraint">
     <enum>QLayout::SetFixedSize</enum>
    </property>
    <item>
     <widget class="QTableView" name="profileView">
      <property name="sizePolicy">
       <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
        <horstretch>0</horstretch>
        <verstretch>0</verstretch>
       </sizepolicy>
      </property>
      <property name="sizeAdjustPolicy">
       <enum>QAbstractScrollArea::AdjustToContents</enum>
      </property>
      <property name="showGrid">
       <bool>false</bool>
      </property>
     </widget>
    </item>
   </layout>
  </widget>
  <widget class="QWidget" name="verticalLayoutWidget">
   <property name="geometry">
    <rect>
     <x>430</x>
     <y>300</y>
     <width>158</width>
     <height>112</height>
    </rect>
   </property>
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
     <widget class="QPushButton" name="addProfileButton">
      <property name="text">
       <string>Add Profile</string>
      </property>
     </widget>
    </item>
    <item>
     <widget class="QPushButton" name="deleteProfileButton">
      <property name="text">
       <string>Delete Profile</string>
      </property>
     </widget>
    </item>
    <item>
     <widget class="QPushButton" name="updateProfileButton">
      <property name="text">
       <string>Update Profile</string>
      </property>
     </widget>
    </item>
    <item>
     <widget class="QPushButton" name="pushButton_3">
      <property name="text">
       <string>Logout</string>
      </property>
     </widget>
    </item>
   </layout>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>

不确定 QtDesigner 是否没有创建固定的宽度和高度,但使用 .setFixedWidth().setFixedHeight() 有效。

我建议不要使用固定尺寸。这种约束仅在非常特定的场景中有用(例如,您的应用程序应该显示在具有非常特定尺寸和分辨率的显示器上,例如嵌入式系统)。一般来说,无论分辨率和屏幕大小如何,您都应该让它适当地调整大小并允许它以适当的方式呈现。

您的问题是您的小部件缺少布局:

您需要添加它,以便顶层布局负责调整您的 table 视图和按钮的大小:

我也不知道您为什么将 table 视图单独放在布局中。它没有任何意义,除非您计划将它与其他小部件分组,就像您对一组按钮所做的那样。布局只有在内部有多个小部件时才有用。否则,您可以只使用小部件的调整大小策略并丢弃布局。