我正在使用Python的PyQt4中的applcation,但无法找到如何更改任务栏图标.我在Qt的Designer中创建了我的.ui文件,我可以在其中更改windowIcon
属性.但这不是我想要的.我想在Windows任务栏中更改应用程序图标的外观.现在它是一个窗口图标中的Python徽标.
我在SO:链接上找到了一些信息,但它对我帮助不大.
我试过:
app = QtGui.QApplication([])
app.setWindowIcon(QtGui.QIcon('chip_icon_normal.png'))
app.exec_()
Run Code Online (Sandbox Code Playgroud)
但图标保持不变.
我要更改的内容,显示图片:(这是在主窗口/对话框或应用程序上调用setWindowIcon完成的,如上所示.)
首先,我是一位经验丰富的C程序员,但他是python的新手.我想使用pyqt在python中创建一个简单的应用程序.让我们想象一下这个应用程序就像它运行时一样简单,它必须在系统托盘中放置一个图标,它在菜单中提供了一个退出应用程序的选项.
这段代码有效,它显示了菜单(我没有连接退出操作等等以保持简单)
import sys
from PyQt4 import QtGui
def main():
app = QtGui.QApplication(sys.argv)
trayIcon = QtGui.QSystemTrayIcon(QtGui.QIcon("Bomb.xpm"), app)
menu = QtGui.QMenu()
exitAction = menu.addAction("Exit")
trayIcon.setContextMenu(menu)
trayIcon.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
但这不是:
import sys
from PyQt4 import QtGui
class SystemTrayIcon(QtGui.QSystemTrayIcon):
def __init__(self, icon, parent=None):
QtGui.QSystemTrayIcon.__init__(self, icon, parent)
menu = QtGui.QMenu()
exitAction = menu.addAction("Exit")
self.setContextMenu(menu)
def main():
app = QtGui.QApplication(sys.argv)
trayIcon = SystemTrayIcon(QtGui.QIcon("Bomb.xpm"), app)
trayIcon.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
我可能会错过一些东西 没有错误,但在第二种情况下,当我点击右键时它没有显示菜单.
我是pyqt的新手,我一直在寻找一些关于pyqt和全屏模式的文档.但我找不到任何东西.所以这是我的问题:
有没有办法在全屏幕上运行PyQT 4应用程序?
我试图在QVBoxLayout
里面放一个QScrollArea
,以便它可以垂直滚动.但是似乎没有添加项目.
我看到一个建议,我应该创建一个ScrollArea使用的内部窗口小部件,并将布局放在其中,尽管它似乎没有用.我的结构应该是这样的:
+-------------------------------
| QScrollArea(realmScroll)
| +----------------------------
| | QWidget(realmScrollInner)
| | +-------------------------
| | | QVBoxLayout(realmLayout)
Run Code Online (Sandbox Code Playgroud)
以及执行此操作的代码:
# Irrelevant, added for context (this works)
centralWidget = QWidget(self)
self.container = QVBoxLayout(centralWidget)
centralWidget.setLayout(self.container)
self.setCentralWidget(centralWidget)
# Where trouble starts
self.realmScroll = QScrollArea(self.container.widget())
self.realmScroll.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
self.realmLayout = QVBoxLayout(self.container.widget())
self.realmScrollInner = QWidget(self.realmScroll)
self.realmScrollInner.setLayout(self.realmLayout)
self.realmScroll.setWidget(self.realmScrollInner)
self.container.addWidget(self.realmScroll)
# Doesn't add to realmLayout
self.realmLayout.addWidget(QLabel("test"))
Run Code Online (Sandbox Code Playgroud)
我还在学习Qt(2天),所以对我出错的地方的深入解答将不胜感激.
更新:
似乎addWidget(QLabel())
工作一直到realmScrollInner
被设置为realmScroll
小部件.由于我想在UI显示后添加元素,我必须这样做,我不确定是否正确:
self.realmLayout.addWidget(QLabel("test"))
# realmScrollInner bound to realmScroll
realmScroll.setWidget(realmScrollInner)
self.container.addWidget(realmScroll)
# Access …
Run Code Online (Sandbox Code Playgroud) 我正在学习PyQT编程,当我尝试一个简单的测试时,我得到了Segmentation错误,这是我的代码pop.py:
#! /usr/bin/python
import sys
from PyQt4.QtGui import QApplication
from PyQt4.QtCore import QUrl
from PyQt4.QtWebKit import QWebView
app = QApplication(sys.argv)
v = QWebView()
v.load(QUrl("http://127.0.0.1/j.html"))
v.show()
app.exec_()
Run Code Online (Sandbox Code Playgroud)
我在127.0.0.1启动了一个Apache服务器进行测试.这是j.html:
<html><script>alert("I am here");</script>
<body>Hello World</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我启动pop.py,打开一个窗口,javascript弹出警告对话框,我点击确定,然后pop.py将完全得到"分段错误"
我试过PySide,得到相同的结果.如果不是在HTML中的JS警报,那就OK了.这是QT的错误还是我错过了什么?
我使用python 2.6.6,python-qt4 4.8.3,libqtwebkit4 2.1.0开发Debian
我也尝试过Fedora 15和PyQt4-4.8.3,python 2.7.1,同样的问题
任何建议,搜索的线索都会有所帮助.谢谢
我怎么知道我使用的是哪个版本的Qt?当我打开Qt Creator时,它显示"欢迎来到Qt Creator 2.3".但是,在构建设置中,它显示Qt Version 4.7.1.
到目前为止,我发现的唯一解决方案是继承QItemDelegate并在paint()函数中实现我的对齐规则.这真的是最简单的方式吗?
我正在使用C++ API.
我想在调整小部件大小时采取行动.
有没有办法在没有在该窗口小部件上安装事件过滤器的情况下捕获它(显然,没有子类化它)?AFAIK,QWidget没有resized
信号.
据我所见,如果在PyQt下的插槽中发生异常,则会将异常打印到屏幕,但不会冒泡.这会在我的测试策略中产生问题,因为如果插槽中发生异常,我将看不到测试失败.
这是一个例子:
import sys
from PyQt4 import QtGui, QtCore
class Test(QtGui.QPushButton):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.setText("hello")
self.connect(self, QtCore.SIGNAL("clicked()"), self.buttonClicked)
def buttonClicked(self):
print "clicked"
raise Exception("wow")
app=QtGui.QApplication(sys.argv)
t=Test()
t.show()
try:
app.exec_()
except:
print "exiting"
Run Code Online (Sandbox Code Playgroud)
请注意异常永远不会退出程序.
有办法解决这个问题吗?
Python新手来自Java(+ SWT/Windowbuilder),我很难解决如何在Python/Qt4(QtDesigner)/ PySide中正确编写大型桌面应用程序的问题.
我想在.ui文件之外的控制器类中保留任何视图逻辑(并且它是.py转换).首先,逻辑独立于GUI框架,其次是.ui和结果.py文件在任何更改时都会被覆盖!
我发现只有一些例子将动作代码添加到单片MainWindow.py(从ui生成)或MyForm.py(也是从.ui生成)中.我看不到任何方法将POPO控制器类链接到QtDesigner中的操作.
有人能指出我在可扩展的MVC/P方法中使用QtDesigner创建大规模应用程序的工作流程吗?
pyqt ×10
python ×6
qt4 ×4
qt ×3
pyqt4 ×2
fullscreen ×1
icons ×1
javascript ×1
menu ×1
pyside ×1
qt-creator ×1
qt-designer ×1
qtcore ×1
qtcpsocket ×1
system-tray ×1
taskbar ×1
windows ×1