Results 1 to 2 of 2

Thread: [SOLVED] [PyQT] QTableview refuses to grow past specified minimum size.

  1. #1
    Join Date
    Aug 2010
    Posts
    2
    Qt products
    Platforms
    Unix/X11 Windows

    Default [SOLVED] [PyQT] QTableview refuses to grow past specified minimum size.

    If I expand a column it will pop a horizontal scroll bar instead of using more screen real estate. Where have I gone wrong? I hope I've included enough info.

    Thanks,

    Todd

    Qt Code:
    1. class MainWin(QtGui.QMainWindow):
    2. """
    3. Inherited from the definition imported from Qt Designer / pyuic construct ThetaMat.ui
    4. """
    5. def __init__(self):
    6. QtGui.QDialog.__init__(self)
    7. self.ui = Ui_mainWindow()
    8. self.ui.setupUi(self)
    9. self.ui.statusbar.showMessage('Welcome')
    10. self.setWindowState(QtCore.Qt.WindowMaximized)
    11. self.ui.mdiArea.show()
    12. self.setCentralWidget(self.ui.mdiArea)
    13. # remember to setup slots / signals here
    14. self.ui.actionAbout_ThetaMat.triggered.connect(self.myAbout)
    15. self.ui.actionView_Current_List.triggered.connect(self.InvGrid)
    16.  
    17. def InvGrid(self):
    18. # see if we already exist (prevents duplicate windows)
    19.  
    20. test = self.ui.mdiArea.findChild(QtGui.QWidget, 'InvList')
    21.  
    22. if test:
    23. print 'Raising existing Inventory List'
    24. test.setFocus()
    25. test.setWindowState(test.windowState() | QtCore.Qt.WindowMaximized)
    26.  
    27. else:
    28. print 'Creating Inventory List'
    29. # create a child window for the grid (need the 'X' in the corner!)
    30. tableWidget = QtGui.QMdiSubWindow(self.ui.mdiArea)
    31. tableWidget.setSizePolicy(QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Maximum)
    32. tableWidget.setWindowTitle('Current Inventory')
    33.  
    34. # put a qtableview in the child window
    35. invTable = QtGui.QTableView(tableWidget)
    36. invTable.setSortingEnabled(True)
    37.  
    38. invTable.setMinimumSize(800, 500)
    39. invTable.setMaximumSize(16777215, 16777215)
    40. invTable.setColumnWidth(0,80)
    41. invTable.setColumnWidth(1,250)
    42. invTable.setColumnWidth(2,40)
    43. invTable.setColumnWidth(3,80)
    44. invTable.setColumnWidth(4,45)
    45. invTable.setColumnWidth(5,80)
    46. invTable.setColumnWidth(6,80)
    47. invTable.setColumnWidth(7,45)
    48. invTable.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
    49.  
    50.  
    51. # populate the grid
    52.  
    53. logindb = pyodbc.connect('DSN=MyDSN;PWD=MyPw')
    54. invcursor = logindb.cursor()
    55. invcursor.execute('select count (*) from Inventory')
    56. row = invcursor.fetchone()
    57. totalrows = row[0]
    58. print "Total rows in inventory = %i" %(int(totalrows))
    59. invcursor.execute('select * from Inventory;')
    60. currenttablerow = 0
    61. invModel = QtGui.QStandardItemModel(totalrows,8)
    62.  
    63. for record in invcursor:
    64. invModel.setItem(currenttablerow, 0, QtGui.QStandardItem(record[0]))
    65. invModel.setItem(currenttablerow, 1, QtGui.QStandardItem(record[1]))
    66. invModel.setItem(currenttablerow, 2, QtGui.QStandardItem(str(record[2])))
    67. invModel.setItem(currenttablerow, 3, QtGui.QStandardItem(record[3]))
    68. invModel.setItem(currenttablerow, 4, QtGui.QStandardItem(str(record[4])))
    69. invModel.setItem(currenttablerow, 5, QtGui.QStandardItem(record[5]))
    70. invModel.setItem(currenttablerow, 6, QtGui.QStandardItem(record[6]))
    71. invModel.setItem(currenttablerow, 7, QtGui.QStandardItem(record[7]))
    72. currenttablerow += 1
    73.  
    74. invModel.setHeaderData(0, QtCore.Qt.Horizontal, 'Category', role=QtCore.Qt.DisplayRole)
    75. invModel.setHeaderData(1, QtCore.Qt.Horizontal, 'Item Description', role=QtCore.Qt.DisplayRole)
    76. invModel.setHeaderData(2, QtCore.Qt.Horizontal, 'Tray #', role=QtCore.Qt.DisplayRole)
    77. invModel.setHeaderData(3, QtCore.Qt.Horizontal, 'Parent Item', role=QtCore.Qt.DisplayRole)
    78. invModel.setHeaderData(4, QtCore.Qt.Horizontal, 'Weight', role=QtCore.Qt.DisplayRole)
    79. invModel.setHeaderData(5, QtCore.Qt.Horizontal, 'Dimension', role=QtCore.Qt.DisplayRole)
    80. invModel.setHeaderData(6, QtCore.Qt.Horizontal, 'Detail #', role=QtCore.Qt.DisplayRole)
    81. invModel.setHeaderData(7, QtCore.Qt.Horizontal, 'Material', role=QtCore.Qt.DisplayRole)
    82.  
    83. invHeader = invTable.horizontalHeader()
    84.  
    85. self.ui.statusbar.showMessage('Displaying Active Inventory')
    86. invTable.setModel(invModel)
    87. invHeader.ResizeMode(QtGui.QHeaderView.Stretch)
    88. invHeader.setStretchLastSection(True)
    89. invTable.updateGeometry()
    90. invTable.showMaximized()
    91.  
    92. # update the list
    93. tableWidget.setObjectName('InvList')
    94. #show the widget
    95. tableWidget.setWindowState(tableWidget.windowState() | QtCore.Qt.WindowMaximized)
    96. tableWidget.showMaximized()
    To copy to clipboard, switch view to plain text mode 
    Attached Images Attached Images
    Last edited by ToddWalter; 4th August 2010 at 20:52. Reason: Marked solved

  2. #2
    Join Date
    Aug 2010
    Posts
    2
    Qt products
    Platforms
    Unix/X11 Windows

    Default Re: [PyQT] QTableview refuses to grow past specified minimum size.

    After a careful re-read of the documentation of QMDISubWindow, I noticed that a sub-window has its own 'central widget' (referred to as the internal widget). Adding the table directly to the sub-window (not to mention not parenting everything in an unwieldy chain) solved all the issues I had.

    Qt Code:
    1. # inherit the main ui
    2. class MainWin(QtGui.QMainWindow):
    3. """
    4. Inherited from the definition imported from Qt Designer / pyuic construct ThetaMat.ui
    5. """
    6. def __init__(self):
    7. QtGui.QDialog.__init__(self)
    8. self.ui = Ui_mainWindow()
    9. self.ui.setupUi(self)
    10. self.ui.statusbar.showMessage('Welcome')
    11. self.setWindowState(QtCore.Qt.WindowMaximized)
    12. self.ui.mdiArea.show()
    13. self.setCentralWidget(self.ui.mdiArea)
    14. # remember to setup slots / signals here
    15. self.ui.actionAbout_ThetaMat.triggered.connect(self.myAbout)
    16. self.ui.actionView_Current_List.triggered.connect(self.InvGrid)
    17.  
    18. def InvGrid(self):
    19. # see if we already exist (prevents duplicate windows)
    20.  
    21. test = self.ui.mdiArea.findChild(QtGui.QWidget, 'InvList')
    22.  
    23. if test:
    24. print 'Raising existing Inventory List'
    25. test.setFocus()
    26. test.setWindowState(test.windowState() | QtCore.Qt.WindowMaximized)
    27.  
    28. else:
    29. print 'Creating Inventory List'
    30. # create a child window for the grid (need the 'X' in the corner!)
    31. print 'creating sub window'
    32. subWindow = QtGui.QMdiSubWindow(self.ui.mdiArea)
    33. subWindow.setWindowTitle('Current Inventory')
    34.  
    35. print 'creating table'
    36. # put a qtableview in the child window
    37. invTable = QtGui.QTableView()
    38. invTable.setSortingEnabled(True)
    39.  
    40. invTable.setMinimumSize(800, 500)
    41. invTable.setMaximumSize(16777215, 16777215)
    42. invTable.setColumnWidth(0,80)
    43. invTable.setColumnWidth(1,250)
    44. invTable.setColumnWidth(2,40)
    45. invTable.setColumnWidth(3,80)
    46. invTable.setColumnWidth(4,45)
    47. invTable.setColumnWidth(5,80)
    48. invTable.setColumnWidth(6,80)
    49. invTable.setColumnWidth(7,45)
    50. invTable.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
    51.  
    52. # populate the grid
    53. print 'populating table'
    54. logindb = pyodbc.connect('DSN=MyDSN;PWD=MyPwd')
    55. invcursor = logindb.cursor()
    56. invcursor.execute('select count (*) from Inventory')
    57. row = invcursor.fetchone()
    58. totalrows = row[0]
    59. print "Total rows in inventory = %i" %(int(totalrows))
    60. invcursor.execute('select * from Inventory;')
    61. currenttablerow = 0
    62. invModel = QtGui.QStandardItemModel(totalrows,8)
    63.  
    64. for record in invcursor:
    65. invModel.setItem(currenttablerow, 0, QtGui.QStandardItem(record[0]))
    66. invModel.setItem(currenttablerow, 1, QtGui.QStandardItem(record[1]))
    67. invModel.setItem(currenttablerow, 2, QtGui.QStandardItem(str(record[2])))
    68. invModel.setItem(currenttablerow, 3, QtGui.QStandardItem(record[3]))
    69. invModel.setItem(currenttablerow, 4, QtGui.QStandardItem(str(record[4])))
    70. invModel.setItem(currenttablerow, 5, QtGui.QStandardItem(record[5]))
    71. invModel.setItem(currenttablerow, 6, QtGui.QStandardItem(record[6]))
    72. invModel.setItem(currenttablerow, 7, QtGui.QStandardItem(record[7]))
    73. currenttablerow += 1
    74.  
    75. invModel.setHeaderData(0, QtCore.Qt.Horizontal, 'Category', role=QtCore.Qt.DisplayRole)
    76. invModel.setHeaderData(1, QtCore.Qt.Horizontal, 'Item Description', role=QtCore.Qt.DisplayRole)
    77. invModel.setHeaderData(2, QtCore.Qt.Horizontal, 'Tray #', role=QtCore.Qt.DisplayRole)
    78. invModel.setHeaderData(3, QtCore.Qt.Horizontal, 'Parent Item', role=QtCore.Qt.DisplayRole)
    79. invModel.setHeaderData(4, QtCore.Qt.Horizontal, 'Weight', role=QtCore.Qt.DisplayRole)
    80. invModel.setHeaderData(5, QtCore.Qt.Horizontal, 'Dimension', role=QtCore.Qt.DisplayRole)
    81. invModel.setHeaderData(6, QtCore.Qt.Horizontal, 'Detail #', role=QtCore.Qt.DisplayRole)
    82. invModel.setHeaderData(7, QtCore.Qt.Horizontal, 'Material', role=QtCore.Qt.DisplayRole)
    83.  
    84. invHeader = invTable.horizontalHeader()
    85. print'updating status bar'
    86. self.ui.statusbar.showMessage('Displaying Active Inventory')
    87. invTable.setModel(invModel)
    88. invHeader.ResizeMode(QtGui.QHeaderView.Stretch)
    89. invHeader.setStretchLastSection(True)
    90. print 'show tableWidget'
    91. # update the list
    92. subWindow.setObjectName('InvList')
    93. subWindow.setWidget(invTable)
    94. subWindow.showMaximized()
    To copy to clipboard, switch view to plain text mode 
    Last edited by ToddWalter; 4th August 2010 at 20:51. Reason: removed sensitive data

Similar Threads

  1. Replies: 2
    Last Post: 23rd March 2009, 18:26
  2. Replies: 1
    Last Post: 24th June 2008, 11:18
  3. Minimum QGroupBox size
    By klnusbaum in forum Qt Programming
    Replies: 3
    Last Post: 19th June 2008, 18:22
  4. Shrink QMainWindow to Minimum Size
    By kloffy in forum Qt Programming
    Replies: 4
    Last Post: 17th February 2008, 18:54
  5. QMenuBar minimum size
    By Angelo Moriconi in forum Qt Programming
    Replies: 1
    Last Post: 14th June 2007, 22:14

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Digia, Qt and their respective logos are trademarks of Digia Plc in Finland and/or other countries worldwide.