2015-11-26 2 views
0

Я хочу показать/скрыть виджет QTextBrowser, нажав одну кнопку. Есть ли смысл переключать его? Теперь у меня две кнопки; один для отображения textbrowser и другой для его скрытия. Кнопки также скрываются в зависимости от видимости текстового браузера. Эта реализация работает так, как ожидалось, но я думаю, что должен/должен быть более сложный способ ее реализации. Какие-либо предложения?PySide Как переключить видимость QTextBrowser

def __init__(self, parent=None): 
    super(Program, self).__init__(parent) 
    ...code... 
    self.connect(self.showDetailsButton, SIGNAL("clicked()"), self.showTextBrowser)  
    self.textBrowser.hide() #hide the textbrowser by default 
    self.resize(461, 200) 
    self.connect(self.hideDetailsButton, SIGNAL("clicked()"), self.hideTextBrowser) 
    self.hideDetailsButton.hide() #hide the hideDetailsButton by default 
...code... 

def showTextBrowser(self): 
    self.textBrowser.show() 
    self.hideDetailsButton.show() 
    self.showDetailsButton.hide() 
    self.resize(461, 444) 

def hideTextBrowser(self): 
    self.textBrowser.hide() 
    self.showDetailsButton.show() 
    self.hideDetailsButton.hide() 
    self.resize(461, 200) 
...code... 

Диалог изменяется каждый раз, когда виджет QTextBrowser отображается или скрывается.

ответ

0

Вам нужно всего лишь одну кнопку, и один обработчик. Измените текст кнопки при нажатии и используйте текущую видимость браузера для переключения между двумя состояниями.

Вот рабочий пример:

from PySide import QtCore, QtGui 

class Program(QtGui.QWidget): 
    def __init__(self): 
     super(Program, self).__init__() 
     self.textBrowser = QtGui.QTextBrowser(self) 
     self.button = QtGui.QPushButton('Hide', self) 
     self.button.clicked.connect(self.toggleTextBrowser) 
     layout = QtGui.QVBoxLayout(self) 
     layout.addWidget(self.textBrowser) 
     layout.addWidget(self.button) 

    def toggleTextBrowser(self): 
     if self.textBrowser.isHidden(): 
      self.button.setText('Hide') 
      self.textBrowser.show() 
      self.resize(461, 444) 
     else: 
      self.button.setText('Show') 
      self.textBrowser.hide() 
      self.resize(461, 200) 

if __name__ == '__main__': 

    import sys 
    app = QtGui.QApplication(sys.argv) 
    window = Program() 
    window.setGeometry(500, 300, 461, 444) 
    window.show() 
    sys.exit(app.exec_()) 
+0

Это работает как шарм - я не был осведомлен о .isHidden() -метода. Хотя мне все еще интересно, что, очевидно, для всех виджетов не существует своего рода общий метод .toggle(). Спасибо! – cmdp

0

Просто сохраните текущее состояние и использовать его для переключения видимости:

def toggleVisibleTextBrowser(self): 
    isVisible= !isVisible # declared somewhere else 
    self.textBrowser.setVisible(isVisible) 

    if isVisible: 
     self.resize(461, 444) 
    else 
     self.resize(461, 200) 
    ... 
Смежные вопросы