2014-09-05 93 views
-1

這裏我創建一個名爲_grid的佈局,並在佈局中放置少量標籤和滑塊。如何在PySide中顯示和隱藏QtGui.QGridLayout

現在我想要這個佈局先隱藏然後onclick我想展示它。

如果有任何與QtGui.QGridLayout相關的簡單功能來顯示和隱藏。

我用Google搜索,發現這是可以通過QWidgetQWidget.hide()

class TimeSlider (QtGui.QVBoxLayout): 
def __init__ (self): 
    QtGui.QVBoxLayout.__init__ (self) 


    # Put everything in a grid 
    _grid = QtGui.QGridLayout() 
    self.addLayout (_grid) 

    # Slider limit labels 

    _grid.addWidget (QtGui.QLabel (''), 0, 0) 
    _labelLayout = QtGui.QHBoxLayout() 
    _grid.addLayout (_labelLayout, 0, 1) 
    self.lower = QtGui.QLabel ('LOW') 


    _labelLayout.addWidget (self.lower) 
    self.higher = QtGui.QLabel ('HIGH') 
    self.higher.setAlignment (QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter) 

    _labelLayout.addWidget (self.higher) 

    # Slider 

    _grid.addWidget (QtGui.QLabel (''), 1, 0) 
    self.sliderBarLayout = QtGui.QHBoxLayout() 
    self.sliderBarLayout.setSpacing (0) 
    _grid.addLayout (self.sliderBarLayout, 1, 1) 

    self.sliderBarLayout.addWidget (self.leftEndstop) 

    self.slider = QtGui.QSlider (QtCore.Qt.Horizontal) 
    self.slider.setTickPosition (QtGui.QSlider.TicksBelow) 
    self.slider.setTracking (True) 
    self.slider.setMinimumWidth (40) 
    self.slider.setPageStep (1) 

    self.sliderBarLayout.addWidget (self.slider) 

    self.rightEndstop = RightEndstop (self, self.root) 

    self.sliderBarLayout.addWidget (self.rightEndstop) 

回答

0
import sys, time 
from PyQt4 import QtGui, QtCore 

class TimeSlider (QtGui.QVBoxLayout): 
    def __init__ (self): 
     QtGui.QVBoxLayout.__init__ (self) 
     # Put everything in a grid 
     _manLayout = QtGui.QVBoxLayout() 
     self._frame = QtGui.QFrame(); 
     _manLayout.addWidget(self._frame) 
     _grid = QtGui.QGridLayout (self._frame) 

     # Slider limit labels 

     _grid.addWidget (QtGui.QLabel (''), 0, 0) 
     _labelLayout = QtGui.QHBoxLayout() 
     _grid.addLayout (_labelLayout, 0, 1) 
     self.lower = QtGui.QLabel ('LOW') 


     _labelLayout.addWidget (self.lower) 
     self.higher = QtGui.QLabel ('HIGH') 
     self.higher.setAlignment (QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter) 

     _labelLayout.addWidget (self.higher) 

     # Slider 

     _grid.addWidget (QtGui.QLabel (''), 1, 0) 
     self.sliderBarLayout = QtGui.QHBoxLayout() 
     self.sliderBarLayout.setSpacing (0) 
     _grid.addLayout (self.sliderBarLayout, 1, 1) 

     # self.sliderBarLayout.addWidget (self.leftEndstop) 

     self.slider = QtGui.QSlider (QtCore.Qt.Horizontal) 
     self.slider.setTickPosition (QtGui.QSlider.TicksBelow) 
     self.slider.setTracking (True) 
     self.slider.setMinimumWidth (40) 
     self.slider.setPageStep (1) 

     self.sliderBarLayout.addWidget (self.slider) 
     self._frame.setLayout(_grid) 
     self.addLayout (_manLayout) 

     #self.rightEndstop = RightEndstop (self, self.root) 

     # self.sliderBarLayout.addWidget (self.rightEndstop) 
    def show(self): 
     self._frame.show() 
    def hide(self): 
     self._frame.hide() 
    def isHidden(self): 
     return self._frame.isHidden() 



class NewTimeSliderTest(QtGui.QWidget): 
    def __init__(self, parent=None, total=20): 
     super(NewTimeSliderTest, self).__init__(parent) 
     self.newTimeSlider = TimeSlider() 
     self.resize(841, 474) 
     self.newTimeSlider.hide() 
     self.button = QtGui.QPushButton('Show/Hide') 
     self.button.clicked.connect(self.handleButton) 
     main_layout = QtGui.QGridLayout() 
     main_layout.addWidget(self.button, 0, 0) 
     main_layout.addLayout(self.newTimeSlider, 0, 1) 
     self.setLayout(main_layout) 
     self.setWindowTitle('Test') 
     self._active = False 

    def handleButton(self): 
     #self.newTimeSlider.show() 
     isHidden = self.newTimeSlider.isHidden() 
     if isHidden: 
      self.newTimeSlider.show() 
     else: 
      self.newTimeSlider.hide() 


app = QtGui.QApplication(sys.argv) 
bar = NewTimeSliderTest(total=101) 
bar.show() 
sys.exit(app.exec_()) 

這個怎麼樣?

任何時候你都可以這樣。

self.newTimeSlider.show() 

self.newTimeSlider.hide() 
+0

'_grid = QtGui.QGridLayout(self._frame)'這裏我得到的錯誤'QLayout :: addChildLayout:佈局 「」 已經有一個parent' – curiousguy 2014-09-05 19:40:29

+0

如果這是需要'_manLayout = QtGui.QVBoxLayout()'? – curiousguy 2014-09-05 19:48:50

+0

我剛剛更新了工作示例的代碼..評論了一些像RightEndstop這樣的行不知道它從哪裏來。 – Achayan 2014-09-05 19:53:50