2013-12-19 4 views
0

Мне нужно показать диалоговое окно поиска, которое будет искать в QTableView. У меня есть следующий код:Отрегулируйте положение элементов в QDialog

def handleFind(self): 
    findDialog = QDialog() 
    findLabel = QLabel("Find what", findDialog) 
    findField = QLineEdit(findDialog) 
    findButton = QPushButton("Find", findDialog) 
    #closeButton = QPushButton("Close", findDialog) 
    findDialog.show() 
    findDialog.exec_() 

Моей проблема: Как настроить положение элементов в QDialog, как сейчас closeButton перезаписывает findButton и findLabel, а также я хотел бы показать кнопки сильфонных findLable и FindField. Я был бы признателен, если вы будете направлять меня в этом ..

---> РЕШИТЬ: С помощью QGridLayout:

 def handleFind(self): 
    findDialog = QDialog() 
    grid = QGridLayout() 
    findDialog.setLayout(grid) 

    findLabel = QLabel("Find what", findDialog) 
    grid.addWidget(findLabel,1,0) 
    findField = QLineEdit(findDialog) 
    grid.addWidget(findField,1,1) 
    findButton = QPushButton("Find", findDialog) 
    grid.addWidget(findButton,2,0) 
    closeButton = QPushButton("Close", findDialog) 
    grid.addWidget(closeButton,2,1) 

    findDialog.show() 
    findDialog.exec_()   

ответ

1

Не используйте диалог, создать свой собственный «диалог» вместо этого. Я пробовал что-то похожее на то, что вы пытаетесь, и я нашел это самым легким.

class CConfigWindow(QtGui.QMainWindow):  
    def __init__(self): 
     super(CConfigWindow, self).__init__() 
     self.setGeometry(200, 200, 800, 600) 
     self.setWindowTitle("config") 
     self.setAttribute(QtCore.Qt.WA_DeleteOnClose) 
     paneW = QtGui.QWidget() 
     grid = QtGui.QGridLayout() 
     paneW.setLayout(grid) 
     tab = QtGui.QTabWidget(self) 
     grid.addWidget(tab,0,0,1,5) 

     hest2 = QtGui.QPushButton("Ok") 
     hest2.clicked.connect(self.ok) 
     grid.addWidget(hest2,1,0) 

     hest2 = QtGui.QPushButton("Cancel") 
     hest2.clicked.connect(self.cancel) 
     grid.addWidget(hest2,1,1) 

     hest2 = QtGui.QPushButton("Factory Defaults") 
     hest2.clicked.connect(self.Reset) 
     grid.addWidget(hest2,1,2) 

     self.setCentralWidget(paneW) 
     self.show() 

     self.activateWindow() 
     self.raise_() 

    def Reset(self): 
     pass    
    def ok(self): 
     self.close() 

    def cancel(self): 
     self.close() 

    def closeEvent(self, event): 
     event.accept() 

self.crap = CConfigWindow() 
+0

Я решил ее с QDialog..but я QGridLayout .. –

1

Я обновил свой код, чтобы расположить элементы в вертикальной компоновке:

def handleFind(self): 
findDialog = QDialog() 

# add a layout to dialog 
layout = QVBoxLayout() 
findDialog.setLayout() 

# add the items to layout instead of dialog 
findLabel = QLabel("Find what", findDialog) 
layout.addWidget(findLabel) 
findField = QLineEdit(findDialog) 
layout.addWidget(findField) 
findButton = QPushButton("Find", findDialog) 
layout.addWidget(findButton) 

#closeButton = QPushButton("Close", findDialog) 

# no need to call show() when calling exec_() 
#findDialog.show() 
findDialog.exec_() 

Для получения дополнительной информации о Qt макетах идти here

Смежные вопросы