Найти - Пользователи
Полная версия: pyQt lineEdit и listWidget передать значение из одного в другое
Начало » GUI » pyQt lineEdit и listWidget передать значение из одного в другое
1
boch333
Доброго времени суток!
Прошу помощи т.к. сам не догоняю

у меня есть несколько форм мне необходимо чтобы значение из дочерней формы из поля listEdit передовались в главную форму в listWidget. попробывал реализовать это с помощью сигналов но почемуто не получается вот код. Прошу подскажите. где я делаю не правельно и как правельно
# -*- coding: utf-8 -*-
import os
import sys
import shutil
from PyQt4 import QtGui, QtCore
from form_file_new_folder_RUN import Ui_File_new_folder_run_Form
from ADD_AD_form import Ui_ADForm
from ADD_User_Group_form import Ui_ADD_User_and_Group_Form
from Connect_to_AD_Form import Ui_Connect_to_AD_Form
class dialogADDadFrom(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.ui = Ui_ADForm()
        self.ui.setupUi(self)
class dialogADDuserANDgroupForm(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.ui = Ui_ADD_User_and_Group_Form()
        self.ui.setupUi(self)
        self.connect(self.ui.pushButton_2,QtCore.SIGNAL("clicked()"),self.close)
        self.connect(self.ui.treeWidget,QtCore.SIGNAL('itemClicked(QTreeWidgetItem *, int)'), self.currenITems)
        #self.connect(self.ui.pushButton,QtCore.SIGNAL("clicked()"),self.connect_to_signal)
        self.connect(self.ui.lineEdit, QtCore.SIGNAL('returnPressed()'), self.connect_to_signal)
    mysignal = QtCore.pyqtSignal(str, name = 'mysignal')
    def connect_to_signal(self):
        # you can use this syntax instead of the 'old' one
        myWin = myWindow()
        self.connect(self, QtCore.SIGNAL('mysignal(QString)'), myWin.myslot)
        self.mysignal.emit(self.ui.lineEdit.text())
    def proba_TreeWidge(self):
        spisok = {"Vasya": "Moscove","Igor": "Kiiv"}
        self.ui.treeWidget.clear()
        self.ui.treeWidget.setColumnCount(2)
        self.ui.treeWidget.setHeaderLabels(["Name", "Address"])
        self.ui.treeWidget.setItemsExpandable(True)
        for name, address in spisok.items():
            item_1 = QtGui.QTreeWidgetItem(self.ui.treeWidget)
            item_1.setText(0, name)
            item_2 = QtGui.QTreeWidgetItem(item_1)
            item_2.setText(0, address)
            self.ui.treeWidget.addTopLevelItem(item_2)
            item_1.addChild(item_2)
    def currenITems(self):
        lista = self.ui.treeWidget.selectedItems()
        if len(lista) == 1:
            id = str(lista[0].text(0))
            self.ui.lineEdit.setText(id)
class dialogConnectToADform(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.ui = Ui_Connect_to_AD_Form()
        self.ui.setupUi(self)
        self.connect(self.ui.pushButton,QtCore.SIGNAL("clicked()"),self.close)
class myWindow(QtGui.QWidget):
    def __init__(self, parent=None):
        super(myWindow,self).__init__(parent)
        self.ui = Ui_File_new_folder_run_Form()
        self.ui.setupUi(self)
        self.ui.pushButton_5.setEnabled(False)
        self.ui.lineEdit.setText(unicode('C:\\'))
        #lvi = QtGui.QListWidgetItem(self.ui.listWidget_2)
        #lvi.setText(self.myslot(self))
        self.connect(self.ui.pushButton_2,QtCore.SIGNAL("clicked()"),QtGui.qApp.quit)
        self.connect(self.ui.pushButton,QtCore.SIGNAL("clicked()"),self.CreateFolder)
        self.connect(self.ui.pushButton_8,QtCore.SIGNAL("clicked()"),self.AddFile)
        self.connect(self.ui.pushButton_4,QtCore.SIGNAL("clicked()"),self.NameCopyFile)
        self.connect(self.ui.pushButton_5,QtCore.SIGNAL("clicked()"),self.DeleteClicked)
        self.connect(self.ui.toolButton,QtCore.SIGNAL("clicked()"),self.NameAddFile)
        self.connect(self.ui.pushButton_6,QtCore.SIGNAL("clicked()"),self.aboutADDadFrom)
        self.connect(self.ui.pushButton_9,QtCore.SIGNAL("clicked()"),self.aboutADDuserANDgroupForm)
        self.connect(self.ui.pushButton_7,QtCore.SIGNAL("clicked()"),self.aboutConnectToADform)
       
    def myslot(self, param):
        #self.text = QtCore.QString(param)
        lvi = QtGui.QListWidgetItem(self.ui.listWidget)
        lvi.setText(param)
        print unicode(param)
        self.ui.lineEdit_3.setText(param)
    def aboutADDadFrom(self):
        global secondObj1
        secondObj1 = dialogADDadFrom()
        secondObj1.show()
    def aboutADDuserANDgroupForm(self):
        global secondObj2
        secondObj2 = dialogADDuserANDgroupForm()
        secondObj2.proba_TreeWidge()
        secondObj2.show()
    def aboutConnectToADform(self):
        global secondObj3
        secondObj3 = dialogConnectToADform()
        secondObj3.show()
    def NameAddFile(self):
        fileNameAdd = unicode(QtGui.QFileDialog.getExistingDirectory(self, self.tr('Select input directory')))
        self.ui.lineEdit.setText(fileNameAdd)
    def CreateFolder(self):
        # Path to be created
        text = self.ui.lineEdit_2.text()
        text2 = self.ui.lineEdit.text()
        if len(text):
            os.makedirs(unicode(text2+text), 0755 );
            #self.ui.lineEdit.clear()
    def AddFile(self):
        # adding a file to a folder
        folder1 = self.ui.lineEdit_2.text()
        folder2 = self.ui.lineEdit.text()
        Count =  self.ui.listWidget.count()
        for i in range(Count):
            items = self.ui.listWidget.item(i).text()
            #print unicode(Count)
            shutil.copy(unicode(items), unicode(folder2+folder1))
    def NameCopyFile(self):
        file = unicode(QtGui.QFileDialog.getOpenFileName(self, 'Open file'))
        #file = stroka.encode("utf8")
        if len(file):
            lvi = QtGui.QListWidgetItem(self.ui.listWidget)
            lvi.setText(file)
            self.ui.pushButton_5.setEnabled(True)
    def DeleteClicked(self):
       self.ui.listWidget.takeItem(self.ui.listWidget.currentRow())
       if self.ui.listWidget.count() == 0:
          self.ui.pushButton_5.setEnabled(False)
буду благодарен за любую помощь
boch333
boch333
Доброго времени суток!
Прошу помощи т.к. сам не догоняю

у меня есть несколько форм мне необходимо чтобы значение из дочерней формы из поля listEdit передовались в главную форму в listWidget. попробывал реализовать это с помощью сигналов но почемуто не получается вот код. Прошу подскажите. где я делаю не правельно и как правельно
# -*- coding: utf-8 -*-
import os
import sys
import shutil
from PyQt4 import QtGui, QtCore
from form_file_new_folder_RUN import Ui_File_new_folder_run_Form
from ADD_AD_form import Ui_ADForm
from ADD_User_Group_form import Ui_ADD_User_and_Group_Form
from Connect_to_AD_Form import Ui_Connect_to_AD_Form
class dialogADDadFrom(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.ui = Ui_ADForm()
        self.ui.setupUi(self)
class dialogADDuserANDgroupForm(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.ui = Ui_ADD_User_and_Group_Form()
        self.ui.setupUi(self)
        self.connect(self.ui.pushButton_2,QtCore.SIGNAL("clicked()"),self.close)
        self.connect(self.ui.treeWidget,QtCore.SIGNAL('itemClicked(QTreeWidgetItem *, int)'), self.currenITems)
        #self.connect(self.ui.pushButton,QtCore.SIGNAL("clicked()"),self.connect_to_signal)
        self.connect(self.ui.lineEdit, QtCore.SIGNAL('returnPressed()'), self.connect_to_signal)
    mysignal = QtCore.pyqtSignal(str, name = 'mysignal')
    def connect_to_signal(self):
        # you can use this syntax instead of the 'old' one
        myWin = myWindow()
        self.connect(self, QtCore.SIGNAL('mysignal(QString)'), myWin.myslot)
        self.mysignal.emit(self.ui.lineEdit.text())
    def proba_TreeWidge(self):
        spisok = {"Vasya": "Moscove","Igor": "Kiiv"}
        self.ui.treeWidget.clear()
        self.ui.treeWidget.setColumnCount(2)
        self.ui.treeWidget.setHeaderLabels(["Name", "Address"])
        self.ui.treeWidget.setItemsExpandable(True)
        for name, address in spisok.items():
            item_1 = QtGui.QTreeWidgetItem(self.ui.treeWidget)
            item_1.setText(0, name)
            item_2 = QtGui.QTreeWidgetItem(item_1)
            item_2.setText(0, address)
            self.ui.treeWidget.addTopLevelItem(item_2)
            item_1.addChild(item_2)
    def currenITems(self):
        lista = self.ui.treeWidget.selectedItems()
        if len(lista) == 1:
            id = str(lista[0].text(0))
            self.ui.lineEdit.setText(id)
class dialogConnectToADform(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.ui = Ui_Connect_to_AD_Form()
        self.ui.setupUi(self)
        self.connect(self.ui.pushButton,QtCore.SIGNAL("clicked()"),self.close)
class myWindow(QtGui.QWidget):
    def __init__(self, parent=None):
        super(myWindow,self).__init__(parent)
        self.ui = Ui_File_new_folder_run_Form()
        self.ui.setupUi(self)
        self.ui.pushButton_5.setEnabled(False)
        self.ui.lineEdit.setText(unicode('C:\\'))
        #lvi = QtGui.QListWidgetItem(self.ui.listWidget_2)
        #lvi.setText(self.myslot(self))
        self.connect(self.ui.pushButton_2,QtCore.SIGNAL("clicked()"),QtGui.qApp.quit)
        self.connect(self.ui.pushButton,QtCore.SIGNAL("clicked()"),self.CreateFolder)
        self.connect(self.ui.pushButton_8,QtCore.SIGNAL("clicked()"),self.AddFile)
        self.connect(self.ui.pushButton_4,QtCore.SIGNAL("clicked()"),self.NameCopyFile)
        self.connect(self.ui.pushButton_5,QtCore.SIGNAL("clicked()"),self.DeleteClicked)
        self.connect(self.ui.toolButton,QtCore.SIGNAL("clicked()"),self.NameAddFile)
        self.connect(self.ui.pushButton_6,QtCore.SIGNAL("clicked()"),self.aboutADDadFrom)
        self.connect(self.ui.pushButton_9,QtCore.SIGNAL("clicked()"),self.aboutADDuserANDgroupForm)
        self.connect(self.ui.pushButton_7,QtCore.SIGNAL("clicked()"),self.aboutConnectToADform)
       
    def myslot(self, param):
        #self.text = QtCore.QString(param)
        lvi = QtGui.QListWidgetItem(self.ui.listWidget)
        lvi.setText(param)
        print unicode(param)
        self.ui.lineEdit_3.setText(param)
    def aboutADDadFrom(self):
        global secondObj1
        secondObj1 = dialogADDadFrom()
        secondObj1.show()
    def aboutADDuserANDgroupForm(self):
        global secondObj2
        secondObj2 = dialogADDuserANDgroupForm()
        secondObj2.proba_TreeWidge()
        secondObj2.show()
    def aboutConnectToADform(self):
        global secondObj3
        secondObj3 = dialogConnectToADform()
        secondObj3.show()
    def NameAddFile(self):
        fileNameAdd = unicode(QtGui.QFileDialog.getExistingDirectory(self, self.tr('Select input directory')))
        self.ui.lineEdit.setText(fileNameAdd)
    def CreateFolder(self):
        # Path to be created
        text = self.ui.lineEdit_2.text()
        text2 = self.ui.lineEdit.text()
        if len(text):
            os.makedirs(unicode(text2+text), 0755 );
            #self.ui.lineEdit.clear()
    def AddFile(self):
        # adding a file to a folder
        folder1 = self.ui.lineEdit_2.text()
        folder2 = self.ui.lineEdit.text()
        Count =  self.ui.listWidget.count()
        for i in range(Count):
            items = self.ui.listWidget.item(i).text()
            #print unicode(Count)
            shutil.copy(unicode(items), unicode(folder2+folder1))
    def NameCopyFile(self):
        file = unicode(QtGui.QFileDialog.getOpenFileName(self, 'Open file'))
        #file = stroka.encode("utf8")
        if len(file):
            lvi = QtGui.QListWidgetItem(self.ui.listWidget)
            lvi.setText(file)
            self.ui.pushButton_5.setEnabled(True)
    def DeleteClicked(self):
       self.ui.listWidget.takeItem(self.ui.listWidget.currentRow())
       if self.ui.listWidget.count() == 0:
          self.ui.pushButton_5.setEnabled(False)
буду благодарен за любую помощь

вот эти кусочки это моя попытка организовать передачу значения с помощью сигнала
self.connect(self.ui.lineEdit, QtCore.SIGNAL('returnPressed()'), self.connect_to_signal)
    mysignal = QtCore.pyqtSignal(str, name = 'mysignal')
    def connect_to_signal(self):
        # you can use this syntax instead of the 'old' one
        myWin = myWindow()
        self.connect(self, QtCore.SIGNAL('mysignal(QString)'), myWin.myslot)
        self.mysignal.emit(self.ui.lineEdit.text())
 def myslot(self, param):
        #self.text = QtCore.QString(param)
        lvi = QtGui.QListWidgetItem(self.ui.listWidget)
        lvi.setText(param)
        print unicode(param)
        self.ui.lineEdit_3.setText(param)
reclosedev
Очень все запутано, на будущее: старайтесь делать минимальный пример кода, который можно запустить.

Если я все-таки понял проблему, то будет выглядеть примерно так:
class dialogADDuserANDgroupForm(QtGui.QMainWindow):
    ...
    def connect_to_signal(self):
        self.mysignal.emit(self.ui.lineEdit.text())
class myWindow(QtGui.QWidget):
    ...
    def aboutADDuserANDgroupForm(self):
        global secondObj2
        secondObj2 = dialogADDuserANDgroupForm()
        secondObj2.proba_TreeWidge()
        secondObj2.mysignal.connect(self.myslot)
        secondObj2.show()
Т.е. мы подключаем сигнал при создании окна.

P.S.
Как вы сами понимаете код с бессмысленными именами?
И зачем global secondObj2? Чтобы не удалялись окна? Тогда лучше передавать родителем себя:
class myWindow(QtGui.QWidget):
    ...
    def aboutADDuserANDgroupForm(self):
        dialog = dialogADDuserANDgroupForm(self)
        ...
но для этого потребуется изменить __init__() в диалогах
class dialogADDuserANDgroupForm(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QMainWindow.__init__(self, parent=parent)
В остальных так же.
boch333
reclosedev, ОГРОМНОЕ СПАСИБО! все получилось
как я понимаю код с бессмысленными именами, лутше не спрашивайте ).
Отдельная благодарность за подсказку с global secondObj2 нутром я чуял, что это както коряво но небыл уверен как правельно
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB