2015-05-24 50 views
1

這可能看起來像一個很長的問題,但它確實很短,我只是決定在這裏複製所有的工作代碼。 我有一個主窗口和一個每日提示小部件。 我使用PyQt Designer生成了兩個UI。 我可以從主窗口菜單打開小部件,但我無法使按鈕正常工作: 我想替換中的一些文本每日提示小部件當前並點擊下一個按鈕。如何使用PyQt觸發窗口小部件中的文本

我有以下的主窗口稱爲MainWindow.py

from PyQt4 import QtCore, QtGui 
from MainWindowUi import Ui_MainWindow 
from FormUi import Ui_Form 

class MainWindow(QtGui.QMainWindow): 
    def __init__(self): 
     QtGui.QMainWindow.__init__(self) 

     # Main window user interface elements 
     self.ui = Ui_MainWindow() 
     self.ui.setupUi(self) 

     # Main window signal/slot connections 
     self.setupConnections() 

    @QtCore.pyqtSlot() 
    def showTipDialog(self): 
     '''Trig dialog Tip''' 
     form = QtGui.QDialog() 
     form.ui = Ui_Form() 
     form.ui.setupUi(form) 
     form.exec_() 

    def setupConnections(self): 
     '''Signal and Slot Support''' 
     self.connect(self.ui.actionTip_of_the_Day, QtCore.SIGNAL('triggered()'), self.showTipDialog) 

我有以下main.py

import sys 

from PyQt4 import QtGui 
from MainWindow import MainWindow 

if __name__ == "__main__": 
    app = QtGui.QApplication(sys.argv) 
    window = MainWindow() 
    window.show() 
    sys.exit(app.exec_()) 

我有以下的主窗口界面稱爲MainWindowUi.py

# -*- coding: utf-8 -*- 

# Form implementation generated from reading ui file 'MainWindow.ui' 
# 
# Created: Thu May 21 20:26:31 2015 
#  by: PyQt4 UI code generator 4.11.3 
# 
# WARNING! All changes made in this file will be lost! 

from PyQt4 import QtCore, QtGui 

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_MainWindow(object): 
    def setupUi(self, MainWindow): 
     MainWindow.setObjectName(_fromUtf8("MainWindow")) 
     MainWindow.resize(800, 600) 
     self.centralwidget = QtGui.QWidget(MainWindow) 
     self.centralwidget.setObjectName(_fromUtf8("centralwidget")) 
     MainWindow.setCentralWidget(self.centralwidget) 
     self.menubar = QtGui.QMenuBar(MainWindow) 
     self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21)) 
     self.menubar.setObjectName(_fromUtf8("menubar")) 
     self.menuHelp = QtGui.QMenu(self.menubar) 
     self.menuHelp.setObjectName(_fromUtf8("menuHelp")) 
     MainWindow.setMenuBar(self.menubar) 
     self.statusbar = QtGui.QStatusBar(MainWindow) 
     self.statusbar.setObjectName(_fromUtf8("statusbar")) 
     MainWindow.setStatusBar(self.statusbar) 
     self.actionTip_of_the_Day = QtGui.QAction(MainWindow) 
     self.actionTip_of_the_Day.setObjectName(_fromUtf8("actionTip_of_the_Day")) 
     self.menuHelp.addAction(self.actionTip_of_the_Day) 
     self.menubar.addAction(self.menuHelp.menuAction()) 

     self.retranslateUi(MainWindow) 
     QtCore.QMetaObject.connectSlotsByName(MainWindow) 

    def retranslateUi(self, MainWindow): 
     MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None)) 
     self.menuHelp.setTitle(_translate("MainWindow", "Help", None)) 
     self.actionTip_of_the_Day.setText(_translate("MainWindow", "Tip of the Day", None)) 

我有以下小部件窗體UI FormUi.py

# -*- coding: utf-8 -*- 

# Form implementation generated from reading ui file 'Form.ui' 
# 
# Created: Thu May 21 23:57:41 2015 
#  by: PyQt4 UI code generator 4.11.3 
# 
# WARNING! All changes made in this file will be lost! 

from PyQt4 import QtCore, QtGui 

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_Form(object): 
    def setupUi(self, Form): 
     Form.setObjectName(_fromUtf8("Form")) 
     Form.resize(418, 249) 
     self.verticalLayout = QtGui.QVBoxLayout(Form) 
     self.verticalLayout.setObjectName(_fromUtf8("verticalLayout")) 
     self.lineEdit = QtGui.QLineEdit(Form) 
     self.lineEdit.setObjectName(_fromUtf8("lineEdit")) 
     self.verticalLayout.addWidget(self.lineEdit) 
     self.horizontalLayout = QtGui.QHBoxLayout() 
     self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) 
     self.pushButton_previous = QtGui.QPushButton(Form) 
     self.pushButton_previous.setObjectName(_fromUtf8("pushButton_previous")) 
     self.horizontalLayout.addWidget(self.pushButton_previous) 
     self.pushButton_next = QtGui.QPushButton(Form) 
     self.pushButton_next.setObjectName(_fromUtf8("pushButton_next")) 
     self.horizontalLayout.addWidget(self.pushButton_next) 
     self.verticalLayout.addLayout(self.horizontalLayout) 

     self.retranslateUi(Form) 
     QtCore.QMetaObject.connectSlotsByName(Form) 

    def retranslateUi(self, Form): 
     Form.setWindowTitle(_translate("Form", "Form", None)) 
     self.lineEdit.setText(_translate("Form", "Here a tip I'd like to replace by pressing the buttons below.", None)) 
     self.pushButton_previous.setText(_translate("Form", "Previous Tip", None)) 
     self.pushButton_next.setText(_translate("Form", "Next Tip", None)) 

請以打開主窗口,然後單擊日的幫助>提示打開控件運行main.py。 感謝您的關注。

+0

除了自動生成的模塊之外,沒有關於按鈕的代碼。那麼,「不能使按鈕工作」是什麼意思? – ekhumoro

+0

我現在開始使用PyQt,我知道如何通過在**主窗口中按下按鈕來替換或清除一些文本**,但我不知道如何在**輔助小工具**中執行此操作。有人可以通過按下pushButton_next來顯示清除「lineEdit」的代碼嗎?我會很感激! – isar

回答

0

您有一個MainWindow類(您從main()函數實例化),您已經編寫該類來實例化Ui_MainWindow類(從而創建GUI)並將按鈕鏈接到彈出對話框的方法。

現在只需將相同的邏輯應用於對話框。而不是直接在showTipDialog中創建QDialog(),而是實例化子類QDialog。以與您爲MainWindow所做的相似的方式編寫子類。將來自prev/next按鈕的clicked信號連接到更改QLineEdit內容的適當方法(您編寫的)。

相關問題