Tôi đang làm việc trên một giao diện người dùng trong PyQt, và tôi chạy vào một vài vấn đề cố gắng sử dụng QDialog. Về cơ bản tôi có một widget chính và một widget phụ, được lưu trong các tệp .py riêng biệt; Tôi muốn tiện ích phụ mở khi tôi nhấp vào một nút nhất định trong tiện ích chính. Điều này dường như được mở tốt.PyQt QDialog - trả về giá trị và đóng cửa từ hộp thoại
Sự cố xảy ra khi trả lại và đóng. Tôi có một nút "gửi" trên tiện ích phụ của tôi - khi người dùng nhấp vào nút này, tôi muốn trả về một giá trị (từ điển được tạo từ đầu vào của họ) cho tiện ích chính và đóng tiện ích phụ. Tôi không thể làm một trong những điều này với mã tôi có ngay bây giờ.
bit Áp dụng mã trong các phụ tùng chính (có thể bổ sung thêm để làm cho nó khép kín nếu vấn đề là không rõ ràng):
import SGROIWidget_ui
def retranslateUi(self, ROIGUI):
#ShowGroupROI is a push-button
self.ShowGroupROI.clicked.connect(self.ShowGroupROIFunction)
def ShowGroupROIFunction(self):
dialog = QDialog()
dialog.ui = SGROIWidget_ui.Ui_ShowGroupWidget()
dialog.ui.setupUi(dialog)
dialog.setAttribute(QtCore.Qt.WA_DeleteOnClose)
if dialog.exec_():
roiGroups=dialog.Submitclose()
print(roiGroups)
dialog.accept()
tôi không bao giờ dường như đánh mã sau if-tuyên bố .
Mã áp dụng từ của tôi phụ tùng (sẽ bao gồm một chút thêm ở đây):
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_ShowGroupWidget(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.setupUi(self)
def setupUi(self, ShowGroupWidget):
#sets up Submit button
def retranslateUi(self, ShowGroupWidget):
self.Submit.clicked.connect(self.Submitclose)
def Submitclose(self):
roiGroups={}
#roiGroups gets set up here as a dictionary
#It prints nicely from here so I know it's not the issue
return roiGroups
#I don't know if I can just do a return statement like this?
self.close()*
* Tôi đã thử ex.close() ở đây là tốt nhưng cũ không được công nhận khi widget này được điều hành như một hộp thoại. Nó không có vẻ như nó sẽ nhận được để dòng này vì tuyên bố trở lại, nhưng tôi không biết làm thế nào khác để đóng tiện ích này sau khi người dùng nhấn "gửi". Hoặc nên dialog.accept() trong widget chính của tôi xử lý?
Một điều cuối cùng - tôi cần điều này trong tôi phụ tùng nào cả, vì nó đang được chạy qua phụ tùng chính của tôi để thay thế?
if __name__=='__main__':
app=QtGui.QApplication(sys.argv)
ex=Ui_ShowGroupWidget()
ex.show()
sys.exit(app.exec_())
Cảm ơn bạn trước! Tôi khá mới mẻ với PyQt nên hy vọng điều này có phần dễ đọc.
Điều đó đã khắc phục được - cảm ơn bạn rất nhiều! –