读书人

pyqt4程序运行有关问题

发布时间: 2012-12-22 12:05:06 作者: rapoo

pyqt4程序运行问题求助
写了一个小程序,用pyqt4,在eclipse测试没问题,直接双击.py文件运行后不显示主界面,也无报错提示,不知是否还需要加什么参数?

#-*-coding: utf-8-*-


import sys
import os
from PyQt4 import QtGui
from xml.dom import minidom


#fileroot = {'handbook':'/Users/congl/Documents/handbook'}
fileroot = {}
menudict={}
windowx = 0
#urltag = '/' #mac
urltag = '\\' #win


config = minidom.parse('config.xml')
file = config.getElementsByTagName('file')[0]
dirs = file.getElementsByTagName('dirs')

for i in dirs:
fileroot[i.getAttribute('name')] = i.childNodes[0].toxml()









def loadICON():
p = os.path.join(os.path.dirname(os.path.realpath(__file__)), "ico.png")
return QtGui.QIcon(p)

class Task(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.setGeometry(100, 100, 640, 480)
self.setFixedSize(640, 480)
self.box = QtGui.QHBoxLayout()

#icon设置
self.icon = QtGui.QSystemTrayIcon(loadICON(), self)
self.menu = QtGui.QMenu(self)


#菜单设置
self.setFileMenu() #创建文件菜单
self.setSysMenu() #设定系统功能菜单

self.icon.show()

self.setTab()


def setTab(self):
self.tab = QtGui.QTabWidget()
#er = QtGui.QLabel('PyQt\nLabel')
#self.setting = self.tab.addTab(er,'setting')
self.setQuickFile()

okBotton = QtGui.QPushButton('OK', self)
okBotton.setGeometry(540,440, 80, 20)
self.box.addWidget(okBotton)

#快捷文件
splitter = QtGui.QSplitter(self)
splitter.setGeometry(20, 10, 600, 420)
splitter.addWidget(self.tab)


def setQuickFile(self):


setDirTable = QtGui.QTableWidget(10,2)
setDirTable.setHorizontalHeaderLabels([u'菜单标示', u'路径'])
setDirTable.setColumnWidth(0, 100)
setDirTable.setColumnWidth(1, 200)
setDirTable.verticalHeader().setVisible(False) #左侧表头不可见


settingbox = self.tab.addTab(setDirTable, u'设置目录')



def setFileMenu(self):
for dictname in fileroot:
handbook = self.menu.addMenu(dictname.decode('utf-8'))
filedir = os.walk(fileroot[dictname].decode('utf-8'))

for roots, dirs, files in filedir:

for dir in dirs:
if(menudict.has_key(roots)):
menudict[roots + urltag + dir] = menudict[roots].addMenu(dir.decode('utf-8'))

else:
menudict[roots + urltag + dir] = handbook.addMenu(dir.decode('utf-8'))


for file in files:
if(menudict.has_key(roots)):
if '.DS_Store' != file:
fileMeun = menudict[roots].addAction(file.decode('utf-8'))
fileMeun.triggered.connect(self.openFile)
fileMeun.setObjectName(roots.decode('utf-8')+urltag+file.decode('utf-8'))



else:
if '.DS_Store' != file:
fileMeun = handbook.addAction(file.decode('utf-8'))
fileMeun.triggered.connect(self.openFile)
fileMeun.setObjectName(roots.decode('utf-8')+urltag+file.decode('utf-8'))

self.icon.setContextMenu(self.menu)


def setSysMenu(self):
self.menu.addSeparator()
#设置
#settingMenu = self.menu.addAction(u'设置')
#settingMenu.triggered.connect(self.setting)

#退出
quitMenu = self.menu.addAction(u'退出')
quitMenu.triggered.connect(self.quit)

#打开文件
def openFile(self):
sender = self.sender()
str = 'start ' + unicode(sender.objectName()) + ''
type = sys.getfilesystemencoding()
# os.system('open "' + unicode(sender.objectName()) + '"') #MAc
os.system(str.decode('UTF-8').encode(type)) #win




def quit(self):
# sys.exit()
self.close()


def setting(self, event):
windowx = self.cursor().pos().x()
self.setGeometry(windowx-320, 0, 640, 480)







app = QtGui.QApplication(sys.argv)
task = Task()
task.show()
sys.exit(app.exec_())


------最佳解决方案--------------------


不要双击。在脚本所在的目录打开命令行,执行python xxx.py。不要急着质疑,先试过再说。
[其他解释]
楼上是对的,也可以右键点击py文件,打开方式中选择IDLE,然后在IDLE中打开的脚本里按F5运行。如果将Py文件编译成exe了,双击打开就是可以的。
[其他解释]
谢谢两位老大,命令行的确是万能解决方法。
[其他解释]
请问楼上各位,用QtGui.QGridLayout 布局的话怎样设置格点大小,命令是什么?
因为我用QtGui.QGridLayout 摆出来的widget位置很乱。

读书人网 >perl python

热点推荐