0

So I'm learning PyQt development and I typed this into a new file inside IDLE:

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
def window():
    app = QApplication(sys.argv)
    win = QDialog()
    b1 = QPushButton(win)
    b1.setText("Button1")
    b1.move(50,20)
    b1.clicked.connect(b1_clicked)

    b2=QPushButton(win)
    b2.setText("Button2")
    b2.move(50,50)
    QObject.connect(b2,SIGNAL("clicked()"),b2_clicked)

    win.setGeometry(100,100,200,100)
    win.setWindowTitle("PyQt")
    win.show()
    sys.exit(app.exec_())

def b1_clicked():
    print("Button 1 clicked")

def b2_clicked():
    print("Button 2 clicked")


if __name__ == '__main__':
    window()

The app does what is supposed to, which is to open a dialog box with two buttons on it, when run inside IDLE. When I try to run the same program from cmd I get this message:

Traceback (most recent call last): File "C:\Python34\Basic2buttonapp.py", line 2, in from PyQt4.QtCore import * ImportError: No module named 'PyQt4'

I've already tried typing python.exe inside cmd to see if Im running the correct version of python from within the cmd, but this does not seem to be the problem. I know it has to do with the communication between python 3.4 and the module, but it seems weird to me that it only happens when trying to run it from cmd.

If anyone has the solution I'll be very thankful.

Sam R
  • 1
  • 1

1 Answers1

0

This is because when running from the command line you're using a different version of Python to the one in IDLE (with different installed packages). You can find which Python is being used by running the following from the command line:

python -c "import sys;print(sys.executable)"

...or within IDLE:

import sys
print(sys.executable)

If those two don't match, there is your problem. To fix it, you need to update your PATH variable to put the parent folder of the Python executable referred to by IDLE at the front. You can get instructions of how to do this on Windows here.

Community
  • 1
  • 1
mfitzp
  • 12,955
  • 5
  • 43
  • 62
  • I tried this, and it is true, they don't match. I went to the link you put here but I'm not quite sure where to look... sorry – Sam R Oct 15 '16 at 15:40