2014-11-05 88 views
3

我在写我的第一个PyQt程序,但是我遇到了按钮问题。我读了一些其他Q & A的,但我无法解决它。PyQt:连接对话框中的按钮

基本上我有一个菜单栏的主窗口。通过点击菜单项“actionSelect”,打开一个名为SelectFiles的新对话框。它包含一个名为“ChooseDirButton”的按钮,该按钮应打开选择目录小部件,并使用所选目录更改“ShowPath”linedit文本。

我的代码如下所示:

from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
import sys 

import TeraGui 

class MainWindow(QMainWindow, TeraGui.Ui_MainWindow): 
    path = "" 

    def __init__(self, parent=None):  
     super(MainWindow, self).__init__(parent) 
     self.setupUi(self) 
     self.actionSelect.triggered.connect(self.Select) 

    def Select(self): 
     dialog = QDialog() 
     dialog.ui = TeraGui.Ui_SelectFiles() 
     dialog.ui.setupUi(dialog) 
     dialog.setAttribute(Qt.WA_DeleteOnClose) 
     dialog.exec_() 

    def ChooseDirectory(): 
     global path 
     path = str(QFileDialog.getExistingDirectory(self, "Select Directory")) 
     self.ShowPath.setText(path) 

app = QApplication(sys.argv) 
form = MainWindow() 
form.show() 
app.exec_() 

我不能让点击按钮“ChooseDirButton”时要执行的ChooseDirectory方法。我试图连接它们,但我不明白正确的语法。此外,在ChooseDirectory方法中也可能有问题。 我使用Qt Designer创建了GUI,并使用“import TeraGui”命令导入它。

回答

1

它看起来像你需要为你的对话框创建一个子类,就像你为主窗口做的一样。

我无法实际测试,如果没有你的UI模块,但这样的事情应该工作:

from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
import sys 

import TeraGui 

class MainWindow(QMainWindow, TeraGui.Ui_MainWindow): 
    def __init__(self, parent=None): 
     super(MainWindow, self).__init__(parent) 
     self.setupUi(self) 
     self.actionSelect.triggered.connect(self.Select) 

    def Select(self): 
     dialog = Dialog(self) 
     dialog.exec_() 
     self.ShowPath.setText(dialog.path) 

class Dialog(QDialog, TeraGui.Ui_SelectFiles): 
    def __init__(self, parent=None): 
     super(Dialog, self).__init__(parent) 
     self.setAttribute(Qt.WA_DeleteOnClose) 
     self.setupUi(self) 
     self.ChooseDirButton.clicked.connect(self.ChooseDirectory) 
     self.path = '' 

    def ChooseDirectory(self): 
     self.path = str(QFileDialog.getExistingDirectory(
      self, "Select Directory")) 

app = QApplication(sys.argv) 
form = MainWindow() 
form.show() 
app.exec_() 
+0

它的工作原理!但我必须将“self.ShowPath.setText(dialog.path)”命令移入ChooseDirectory方法并将其更改为“self.ShowPath.setText(self.path)”。 – user2996448 2014-11-06 13:58:40