2017-02-24 93 views
0

我只是想創建一個小應用程序,它在按下按鈕時打開另一個對話框。以下是對話框的代碼。創建一個返回參數的自定義對話框

from PyQt4 import QtCore, QtGui 

class Ui_Dialog(object): 
    def setupUi(self, Dialog): 
     Dialog.setObjectName("Dialog") 
     Dialog.resize(508, 300) 
     self.buttonBox = QtGui.QDialogButtonBox(Dialog) 
     self.buttonBox.setGeometry(QtCore.QRect(150, 250, 341, 32)) 
     self.buttonBox.setOrientation(QtCore.Qt.Horizontal) 
     self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok) 
     self.buttonBox.setObjectName("buttonBox") 
     self.label = QtGui.QLabel(Dialog) 
     self.label.setGeometry(QtCore.QRect(10, 120, 181, 31)) 
     font = QtGui.QFont() 
     font.setPointSize(16) 
     self.label.setFont(font) 
     self.label.setObjectName("label") 
     self.sl_value = QtGui.QSlider(Dialog) 
     self.sl_value.setGeometry(QtCore.QRect(220, 120, 161, 31)) 
     self.sl_value.setOrientation(QtCore.Qt.Horizontal) 
     self.sl_value.setObjectName("sl_value") 
     self.ed_value = QtGui.QLineEdit(Dialog) 
     self.ed_value.setGeometry(QtCore.QRect(400, 120, 41, 31)) 
     font = QtGui.QFont() 
     font.setPointSize(16) 
     self.ed_value.setFont(font) 
     self.ed_value.setObjectName("ed_value") 
     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.label.setText(QtGui.QApplication.translate("Dialog", "Set example value:", None, QtGui.QApplication.UnicodeUTF8)) 

而在主文件我已經添加下面的代碼段

class StartSub2(QtGui.QDialog, Ui_Dialog): 
    def __init__(self,parent=None): 
     QtGui.QDialog.__init__(self,parent) 
     self.setupUi(self) 

dlg = StartSub2() 
if dlg.exec_(): 
    values = dlg.getValues() 

每當按下按鈕時打開的對話框但是對話的是元件的完全空沒有被示出。 那麼如何讓元素在對話框中可見? 但是,當我嘗試導入主文件對話框的文件我收到錯誤

cannot import name Ui_Dialog 
+0

你可以表現出你所得到的 – eyllanesc

+0

你的代碼已經發布的作品對我來說非常精細的圖像。我只需要在創建對話框之前添加'app = QtGui.QApplication([])''。 – ekhumoro

回答

0

使用PyQt5(對不起)。首先,UI定義:

# file ui_dialog.py 

from PyQt5 import QtCore, QtGui, QtWidgets 

class Ui_Dialog(object): 
    def setupUi(self, Dialog): 
     Dialog.setObjectName("Dialog") 
     Dialog.resize(508, 300) 
     self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) 
     self.buttonBox.setGeometry(QtCore.QRect(150, 250, 341, 32)) 
     self.buttonBox.setOrientation(QtCore.Qt.Horizontal) 
     self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok) 
     self.buttonBox.setObjectName("buttonBox") 
     self.sl_value = QtWidgets.QSlider(Dialog) 
     self.sl_value.setGeometry(QtCore.QRect(220, 120, 161, 31)) 
     self.sl_value.setOrientation(QtCore.Qt.Horizontal) 
     self.sl_value.setObjectName("sl_value") 
     self.buttonBox.accepted.connect(Dialog.accept) 
     self.buttonBox.rejected.connect(Dialog.reject) 
     QtCore.QMetaObject.connectSlotsByName(Dialog) 

,並在同一目錄下,應用程序定義:

from PyQt5.QtWidgets import (QApplication, QDialog) 
from ui_dialog import Ui_Dialog 


class StartSub2(QDialog): 
    def __init__(self,parent=None): 
     QDialog.__init__(self,parent) 

     self.ui = Ui_Dialog() 
     self.ui.setupUi(self) 

     self.values = dict(slider=None) 

     self.slider = self.ui.sl_value 

     # connect the valueChanged signal to the update_slider slot 
     self.slider.valueChanged.connect(self.update_slider) 

    # slot 
    def update_slider(self, val): 
     self.values['slider'] = val 


if __name__ == '__main__': 
    import sys 

    app = QApplication(sys.argv) 
    dialog = StartSub2() 
    if dialog.exec(): 
     slider_value = dialog.values['slider'] 
+0

非常感謝你 –

+0

你非常歡迎。我希望它有幫助!如果答案足夠了,請考慮標記爲正確。欣賞它! – Crispin