2016-03-07 10 views
0

Возможно ли, чтобы я получил сигналы pyqt для запуска метода из другого класса? Я пробовал все виды, но не повезло. Моя цель состоит в том, чтобы вызвать метод pickFile() в get_rooms, когда щелкнут room_file_button (отмечен).Сигнал Connec pyqt с другим классом

import sys 
from PyQt4 import QtCore, QtGui, uic 
import openpyxl 
from openpyxl import load_workbook 
from openpyxl.styles import Protection 
import xlrd 
import csv 
import os 
import re 

class MyApp(QtGui.QMainWindow, Ui_MainWindow):  

    def __init__(self): 
     QtGui.QMainWindow.__init__(self) 
     Ui_MainWindow.__init__(self) 
     self.setupUi(self) 


     self.room_file_button.clicked.connect(get_rooms.pickFile) # this one 
     self.radioButton_1.clicked.connect(self.onRadioButton1)  
     self.radioButton_2.clicked.connect(self.onRadioButton2)  
     self.radioButton_3.clicked.connect(self.onRadioButton3) 
     self.spinBox.valueChanged.connect(self.valuechange) 


class first_file(MyApp):    
    def __init__(self): 
     MyApp.__init__(self) 

     some methods .... 


class get_rooms(MyApp): 

    def __init__(self): 
     MyApp.__init__(self) 

    def pickFile(self, value, group_1): 
     print 'yipeee !' 
     xy = 0 
     while True: 
      filename = QtGui.QFileDialog.getOpenFileName(self, 'Open File', '.') 
      if filename == '' and xy < 2: 
       print(" ") 
       xy = xy + 1 
       continue 
      elif filename != '': 
       break 
      else: 
       sys.exit() 
+2

Почему это классы '' first_file' и get_rooms' унаследовав от 'MyApp'? Чего вы хотите достичь. Пожалуйста, дайте немного больше информации. – DreyFax

ответ

-1

Во-первых, можно установить pickFile функцию в качестве статической функции (без себя):

class get_rooms(MyApp): 

    def __init__(self): 
     MyApp.__init__(self) 

    @staticmethod 
    def pickFile(value, group_1): 

, а затем вы можете использовать room_file_button.clicked сигнал; если вы хотите, чтобы отправить параметры этой функции, вы можете использовать lambda:

self.room_file_button.clicked.connect(lambda: get_rooms.pickFile(myValue,myGrupe)) 
+0

Вы можете создать экземпляр get_rooms и использовать этот метод как слот. Итак, вы должны ** установить 'pickFile', поскольку статическая функция_ ошибочна! Также не будет никаких аргументов по вызову, потому что сигнал не имеет аргументов. Определение Lambda не имеет значения. – DreyFax

+0

Да, ** должно быть ** ошибочно. Я не знаю о pyQt4, но в pyQt5 (и python 3) этот код работает правильно. –

+0

Может быть, я должен был указать im, используя PYQT4 и Python 2.7 – Stevo

Смежные вопросы