2015-11-13 28 views
1

我有一個按鈕,以在QTabWidget添加標籤。但是當我改變按鈕的尺寸時,它不再處於角落。那麼我怎麼能像第一張照片那樣把它帶到角落呢?小部件的角落QTabBar是不是在角落

不改變大小:

http://i.stack.imgur.com/10NJy.png

更改尺寸:

http://i.stack.imgur.com/cA4Zp.png

這裏是我的代碼:

from PyQt4 import QtGui, QtCore 


class PlaylistTable(QtGui.QWidget): 
    def __init__(self): 
     super(PlaylistTable, self).__init__() 
     self.playlistTable = QtGui.QTableWidget(self) 
     self.playlistTable.setFrameShape(QtGui.QFrame.NoFrame) 
     self.playlistTable.setFrameShadow(QtGui.QFrame.Sunken) 
     self.playlistTable.setLineWidth(0) 
     self.playlistTable.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers) 
     self.playlistTable.setVerticalScrollMode(QtGui.QAbstractItemView.ScrollPerPixel) 
     self.playlistTable.setHorizontalScrollMode(QtGui.QAbstractItemView.ScrollPerPixel) 
     self.playlistTable.setShowGrid(True) 
     self.playlistTable.setGridStyle(QtCore.Qt.SolidLine) 
     self.playlistTable.setWordWrap(True) 
     self.playlistTable.setCornerButtonEnabled(True) 
     self.playlistTable.verticalHeader().setVisible(False) 


class CustomTabWidget(QtGui.QTabWidget): 
    """Tab Widget that that can have new tabs easily added to it.""" 

    def __init__(self, parent=None): 
     super(CustomTabWidget, self).__init__(parent) 
     # QtGui.QTabWidget.__init__(self, parent) 

     # Tab Bar 
     self.tab = QtGui.QTabBar() 
     self.setTabBar(self.tab) 

     # Properties 
     self.setMovable(True) 
     self.setTabsClosable(True) 

     self.plusButton = QtGui.QPushButton("+") 
     self.plusButton.setFixedSize(QtCore.QSize(22, 22)) 
     self.setCornerWidget(self.plusButton) 

     # Signals 
     self.connect(self.plusButton, QtCore.SIGNAL('clicked()'), self.addTab) 
     # self.tab.plusClicked.connect(self.addTab) 
     self.tab.tabMoved.connect(self.tab.moveTab) 
     self.tabCloseRequested.connect(self.removeTab) 

    def addTab(self): 
     string = QtCore.QString.fromUtf8("Playlist") 
     tab = PlaylistTable() 
     super(CustomTabWidget, self).addTab(tab, string) 


class AppDemo(QtGui.QMainWindow): 
    def __init__(self): 
     super(AppDemo, self).__init__() 
     self.centralwidget = QtGui.QWidget(self) 
     self.horizontalLayout = QtGui.QHBoxLayout(self.centralwidget) 
     self.horizontalLayout.setContentsMargins(0, -1, 0, -1) 

     self.playlist_manager = CustomTabWidget(self.centralwidget) 

     self.horizontalLayout.addWidget(self.playlist_manager) 

     self.playlist_manager.addTab() 
     self.setCentralWidget(self.centralwidget) 

     self.show() 
# end class AppDemo 


def main(): 
    import sys 
    app = QtGui.QApplication(sys.argv) 

    w = AppDemo() 
    w.setWindowTitle('AppDemo') 
    w.show() 

    sys.exit(app.exec_()) 

if __name__ == '__main__': 
    main() 

回答

2

我猜原因是這樣的,來自QTabWidget文檔:

根據小部件的sizeHint()和style()確定小部件的幾何形狀 。

如果打印sizeHint()的QPushButton的你會看到寬度從來沒有低於一定值。

我發現一個替代方案是使用一個QToolButton可以做的一切(甚至更多)一QPushButton一樣。

self.plusButton = QtGui.QToolButton(self) 
self.plusButton.setText("+") 
+0

是的,謝謝。有用。 – mozart