2016-07-26 87 views
0

我已經構建了一個GUI(使用PyQt5),它允許我讀取CSV,進行一些基本操作並將其發送到Excel。使用xlwings運行交互式GUI時出現問題

然後,我使用xlwings將此GUI集成到Excel中,但我遇到了問題。當我使用GUI時,我無法在Excel中操作數據。我認爲這是因爲我的宏仍在運行。

有沒有辦法在不失去對Excel的控制的情況下運行我的GUI?

def Main(): 
    import sys 
    app = QtWidgets.QApplication(sys.argv) 
    MainWindow = QtWidgets.QMainWindow() 
    ui = Ui_MainWindow() 
    ui.setupUi(MainWindow) 
    MainWindow.show() 
    sys.exit(app.exec_()) 

,並在Excel:

Sub GUI() 
    RunPython ("import UImainwindow; UImainwindow.Main()) 
End sub 
+0

當您說「將此GUI集成到Excel中」時,很難遵循您所做的確切操作。你可以添加更多的細節或僞代碼?另外,你在Windows或Mac? –

+0

我像任何其他功能一樣運行我的GUI。我在Windows上。 – Coolpix

+0

嗨。我最後玩WScript.Shell的「WaitOnReturn」參數。我在ExecuteWindows(可選的WaitOnReturnBool As Boolean)和RunPython上的其他可選參數(可選的ByVal WaitOnReturnBool As Boolean)上添加一個可選參數。但是當我嘗試像RunPython(StringCommand,False)那樣運行RunPython函數時,我得到了語法錯誤。快到了 ! – Coolpix

回答

0

Finaly我得到了一個解決方案。

我修改ExecuteWindows子添加一個可選的參數是這樣的:

Sub ExecuteWindows(IsFrozen As Boolean, PythonCommand As String, PYTHON_WIN As String, LOG_FILE As String, SHOW_LOG As Boolean, Optional PYTHONPATH As String, Optional WaitOnReturnBool As Boolean) 

然後我修改RunPython功能這樣

Public Function RunPython(PythonCommand As String, Optional ByVal WaitOnReturnBool As Boolean = True) 

ExecuteWindows False, PythonCommand, PYTHON_WIN, LOG_FILE, SHOW_LOG, PYTHONPATH, WaitOnReturnBool 

而且finaly調用具有兩個參數的RunPython函數

RunPython command, WaitOnReturnBool 

我不得不在我的腳本中使用wb = xw.Workbook.active()而不是wb = xw.Workbook.caller(),但它起作用。 這允許我運行一個extern GUI而不失去對Excel的控制。