Это мой main.py У меня есть функция называется loadShot, что я хочу, чтобы позвонить с другогоКак вызвать функцию в PySide MainWindow из другого питона сценария
class MainWindow(QMainWindow):
# Main Window UI
def __init__(self, parent=None):
QMainWindow.__init__(self, parent)
loadUi(os.path.join(SCRIPT_DIRECTORY, 'mainwindow.ui'), self)
self.connectInterface()
# Connect signals
def connectInterface(self):
self.scene_Line.textChanged.connect(self.shotName)
self.activeProjcet_Line.textChanged.connect(self.shotName)
self.character_Line.textChanged.connect(self.shotName)
self.take_Line.valueChanged.connect(self.shotName)
self.load_Button.setShortcut(QKeySequence("Alt+B"))
####################################################
# Shot Loader Functions
####################################################
def browse(self, dir):
root = Tkinter.Tk()
root.withdraw() #use to hide tkinter window
tempdir = tkFileDialog.askdirectory(parent=root, initialdir=dir, title='Please select a directory')
if tempdir.startswith('D:/Capture data/'):
self.activeProjcet_Line.setText(tempdir)
elif tempdir.startswith('R:/Project Files/'):
self.uploadProjcet_Line.setText(tempdir)
self.uploadFolder()
else:
pass
def uploadFolder(self):
project = self.activeProjcet_Line.text()
uploadDir = self.uploadProjcet_Line.text()
f = open('C:/_Mocap/output/folderName.txt', 'w')
f.write(' \n' + project.replace('D:/Capture data/', '') + '\n' + uploadDir.replace('R:/Project Files/', ''))
f.close()
def loadShot(self):
shot = self.shotName_Line.text()
f = open('C:/_Mocap/output/ShotLoader.txt', 'w')
f.write('\n' + '[name]\n' + '\n' + 'take Name=' + shot)
f.close()
self.uploadFolder()
if self.incrementTake.isChecked():
self.takeIncrement()
else:
pass
Это мой другой питон файл, который является key listener, и я хочу загрузить функциюShot. Проблема в том, что я продолжаю загружать MainWindow в качестве экземпляра. Который я не могу сделать. Мне нужно просто вызвать функцию в моем классе MainWindow без загрузки другого экземпляра.
def handle_Ctrl_L():
m = MainWindow()
m.loadShot()
hk = HotKeys()
w = WindowMgr()
pid = w.GetProcessID('Blade')
w.focusWindow(pid)
time.sleep(.2)
hk.F8()
Это не на 100% понятно, что вы просите, но похоже, что вы хотите вызвать связанный метод (метод, который имеет 'self' в качестве первого параметра, в вашем случае' loadShot') без создания экземпляра вашего класса. Вы не можете этого сделать. Вы можете сделать этот метод методом класса, но затем вы потеряете ссылку на переменные экземпляра, такие как 'self.shotName_Line.text()' и т. Д. Можете ли вы расширить то, что вы на самом деле пытаетесь достичь? – 101
Спасибо, что ответили. У меня есть моя main.py, у которой есть mypyside gui MainWindow. У меня есть несколько методов, которые взаимодействуют с gui. loadShot() получает информацию из редактирования строки и записывает ее в файл. В моем файле other.py. У меня есть слушатель клавиатуры, у которого есть метод handle_CTRL_L() Я хочу иметь возможность вызвать метод loadShot(). Это не может быть примером, потому что он перезапускает мой gui. Убивает всю информацию и ничего не записывает в файл. Я надеялся использовать пользовательский сигнал в методе handle_ctrl_L(), который испускается при вызове метода. Благодарю. –