2014-09-05 3 views
-1

여기에 _grid이라는 레이아웃을 만들고 레이아웃에 레이블과 슬라이더를 거의 넣지 않았습니다.PySide에서 QtGui.QGridLayout을 표시하고 숨기는 방법

이제 레이아웃을 먼저 숨기고 싶습니다. onclick 표시하고 싶습니다.

표시하고 숨길 QtGui.QGridLayout과 관련된 간단한 기능이있는 경우.

내가 봤이 이것에 대해 QWidget.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_()) 

방법에 의해 QWidget 사용할 수 있습니다 발견?

언제든지이 모든 것을 할 수 있습니다.

self.newTimeSlider.show() 

또는

self.newTimeSlider.hide() 
+0

'_grid = QtGui.QGridLayout (self._frame) '여기에 내가 오류'QLayout :: addChildLayout 얻고있다 :이 경우 레이아웃은 ""이미 parent' – curiousguy

+0

있다 '_manLayout = QtGui.QVBoxLayout()'이 필요합니까? – curiousguy

+0

방금 ​​작업 예제로 코드를 업데이트했습니다. RightEndstop coz와 같은 몇 줄의 주석은 어디에서 왔는지 모릅니다. – Achayan

관련 문제