2012-03-08 13 views
0

ダイアログボックスには合計8個のグループボックスが必要でした。水平スクロールバーを関連付ける方法を知らないので、スクロールしてすべてのグループボックスにアクセスできます。下のコードでは、例として2つしか追加していません。どんな助けもありがとうございます。複数のグループボックスに水平スクロールバーを関連付ける方法。

class Ui_Dialog(object): 
    def setupUi(self, Dialog): 
     Dialog.setObjectName("Dialog") 
     Dialog.resize(400, 300) 
     self.buttonBox = QtGui.QDialogButtonBox(Dialog) 
     self.buttonBox.setGeometry(QtCore.QRect(300, 20, 81, 71)) 
     self.buttonBox.setOrientation(QtCore.Qt.Vertical) 
     self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok) 
     self.buttonBox.setObjectName("buttonBox") 
     self.scrollArea = QtGui.QScrollArea(Dialog) 
     self.scrollArea.setGeometry(QtCore.QRect(30, 20, 251, 251)) 
     self.scrollArea.setWidgetResizable(True) 
     self.scrollArea.setObjectName("scrollArea") 
     self.scrollAreaWidgetContents = QtGui.QWidget(self.scrollArea) 
     self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 249, 249)) 
     self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents") 
     self.groupBox = QtGui.QGroupBox(self.scrollAreaWidgetContents) 
     self.groupBox.setGeometry(QtCore.QRect(10, 10, 211, 81)) 
     self.groupBox.setObjectName("groupBox") 
     self.textEdit = QtGui.QTextEdit(self.groupBox) 
     self.textEdit.setGeometry(QtCore.QRect(10, 20, 171, 51)) 
     self.textEdit.setObjectName("textEdit") 
     self.groupBox_2 = QtGui.QGroupBox(self.scrollAreaWidgetContents) 
     self.groupBox_2.setGeometry(QtCore.QRect(10, 110, 211, 111)) 
     self.groupBox_2.setObjectName("groupBox_2") 
     self.textEdit_2 = QtGui.QTextEdit(self.groupBox_2) 
     self.textEdit_2.setGeometry(QtCore.QRect(10, 20, 171, 84)) 
     self.textEdit_2.setObjectName("textEdit_2") 
     self.verticalScrollBar = QtGui.QScrollBar(self.scrollAreaWidgetContents) 
     self.verticalScrollBar.setGeometry(QtCore.QRect(230, 0, 16, 241)) 
     self.verticalScrollBar.setOrientation(QtCore.Qt.Vertical) 
     self.verticalScrollBar.setObjectName("verticalScrollBar") 
     self.scrollArea.setWidget(self.scrollAreaWidgetContents) 

     self.retranslateUi(Dialog) 
     QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL("accepted()"), Dialog.accept) 
     QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL("rejected()"), Dialog.reject) 
     QtCore.QMetaObject.connectSlotsByName(Dialog) 

    def retranslateUi(self, Dialog): 
     Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "Dialog", None, QtGui.QApplication.UnicodeUTF8)) 
     self.groupBox.setTitle(QtGui.QApplication.translate("Dialog", "GroupBox", None, QtGui.QApplication.UnicodeUTF8)) 
     self.groupBox_2.setTitle(QtGui.QApplication.translate("Dialog", "GroupBox", None, QtGui.QApplication.UnicodeUTF8)) 


if __name__ == "__main__": 
    import sys 
    app = QtGui.QApplication(sys.argv) 
    Dialog = QtGui.QDialog() 
    ui = Ui_Dialog() 
    ui.setupUi(Dialog) 
    Dialog.show() 
    sys.exit(app.exec_()) 

Here is the picture

+2

通常、物事が見える大きさよりも大きくなったときに 'QScrollArea'が自動的にスクロールバーが表示されるでしょう。手動で 'QScrollBar'を作成する必要はありません。なぜあなたは自分で自分を作成していますか? – Avaris

+3

ああ、固定サイズで手作業で置いています。レイアウトマネージャを使用していないのはなぜですか? – Avaris

+0

@Avaris:両方の点でニース。それはほとんど正しい答えです。 ScrollAreaに付属のスクロールバーを使用して、レイアウトを使用します:-) – jdi

答えて

4

私がコメントで言ったように、QScrollAreaは手動QScrollBarを必要としません。必要に応じて作成されます。私は、あなたの問題は '動作していない'コードを見ることなく何かを確認することはできませんが、私の推測では、固定サイズのアイテムとそれらの配置です。おそらくウィジェットのマージンの外側に物を置いているか、または内部のウィジェットが適切に成長しないように互いに重なっているでしょう。

とにかく、ここで(スクロールバーに注意してください)あなたのダイアログを複製し、最小限の例です:

import sys 
from PyQt4 import QtGui, QtCore 

class MyDialog(QtGui.QDialog): 
    def __init__(self, parent=None): 
     super(MyDialog, self).__init__(parent) 

     scrolllayout = QtGui.QVBoxLayout() 

     scrollwidget = QtGui.QWidget() 
     scrollwidget.setLayout(scrolllayout) 

     scroll = QtGui.QScrollArea() 
     scroll.setWidgetResizable(True) # Set to make the inner widget resize with scroll area 
     scroll.setWidget(scrollwidget) 

     self.groupboxes = [] # Keep a reference to groupboxes for later use 
     for i in range(8): # 8 groupboxes with textedit in them 
      groupbox = QtGui.QGroupBox('%d' % i) 
      grouplayout = QtGui.QHBoxLayout() 
      grouptext = QtGui.QTextEdit() 
      grouplayout.addWidget(grouptext) 
      groupbox.setLayout(grouplayout) 
      scrolllayout.addWidget(groupbox) 
      self.groupboxes.append(groupbox) 

     self.buttonbox = QtGui.QDialogButtonBox() 
     self.buttonbox.setOrientation(QtCore.Qt.Vertical) 
     self.buttonbox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok) 

     layout = QtGui.QHBoxLayout() 
     layout.addWidget(scroll) 
     layout.addWidget(self.buttonbox) 
     self.setLayout(layout) 

if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 
    dialog = MyDialog() 
    dialog.show() 
    sys.exit(app.exec_()) 

enter image description here

+0

私はそれを手に入れました。ありがとう。私はあなたの助けに感謝します – Jack

+0

ありがとうAvaris。私は同じ問題に直面した。このソリューションは多くの助けとなりました。 – Minion

関連する問題