我有一个QListView,我使用自定义绘图显示项目.在每个项目(即每个列表行)中,我希望能够显示一些用户可以单击的"超链接",然后调用某些功能.
我已经尝试检查官方文档(例如模型/视图编程)以及相当多的谷歌搜索,但还没有弄清楚如何实现这一目标.
我有两个想法,每个都有自己的问题:
我最初的方法是使用QListWidget和.setItemWidget(),其中我有一个带有布局和子窗口小部件的正确小部件.不幸的是,当我的列表增加到数百或数千个项目时,这太慢了.这就是我用委托更改为QListView的原因.
根据getOpenFileName说明:
QString fileName = QFileDialog.getOpenFileName(this, tr("Open File"),
"/home",
tr("Images (*.png *.xpm *.jpg)"));
Run Code Online (Sandbox Code Playgroud)
当我关闭它时,如何让对话框记住最后一次的路径?
什么是tr意味着tr("Open File")什么?
谢谢
我有一个简单的PyQt4应用程序(请参阅下面的代码),它揭示了下一个问题:如果我从QLineEdit中选择文本并将其复制到剪贴板,那么我只能在我的应用程序运行时将其粘贴到另一个应用程序.似乎在退出时PyQt应用程序清除了剪贴板,因此我无法在应用程序关闭后粘贴文本.
我该怎么做才能避免这个问题?
PyQt 4.4.3 @ Python 2.5 @ Windows XP.此效果也在PyQt 4.5+和Linux上得到证实.
import sys
from PyQt4 import QtGui
app = QtGui.QApplication(sys.argv)
edit = QtGui.QLineEdit()
edit.setText('foo bar')
edit.show()
app.exec_()
Run Code Online (Sandbox Code Playgroud) 我找不到在QTabWidget中设置文本对齐方式.
在我创建了这个小部件的实例之后,我将其tabPosition属性设置为West,但我希望它在水平方向上显示文本/标签.我已经看了Qt的样式表,但正如你所看到的,text-align属性只能在QPushButton和QProgressBar上设置.
我已经在网上搜索了,但我刚发现了一个bug报告,一个未回答的问题,最后是一个建议重新实现paint()方法的用户.也许我会解决,但我使用Python(PyQt或PySide),我不知道该怎么做.
你能帮助我吗?
编辑:感谢Teukamm,我写了一些代码:
from PyQt4 import QtGui, QtCore
class HorizontalTabWidget(QtGui.QTabBar):
def paintEvent(self, event):
for index in range(self.count()):
painter = QtGui.QPainter()
painter.begin(self)
painter.setPen(QtCore.Qt.blue);
painter.setFont(QtGui.QFont("Arial", 10));
tabRect = self.tabRect(index)
painter.drawText(tabRect, QtCore.Qt.AlignVCenter | QtCore.Qt.TextDontClip, self.tabText(index));
painter.end()
def sizeHint(self):
return QtCore.QSize(60, 130)
import sys
app = QtGui.QApplication(sys.argv)
tabs = QtGui.QTabWidget()
tabs.setTabBar(HorizontalTabWidget())
widget1 = QtGui.QWidget()
widget2 = QtGui.QWidget()
tabs.addTab(widget1, "Widget1")
tabs.addTab(widget2, "Widget2")
tabs.setTabPosition(2)
tabs.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
最后我的文本按照我的预期对齐,但我有一点(大?)问题:当你点击每个标签按钮的右侧时,它不会发送currentChanged SIGNAL.我还尝试在paintEvent中扩展每个tabRect的宽度,但它不起作用.我应该改变什么?
谢谢 :) …
我是XPath的新手.我正在尝试使用XPath解析页面.我需要从标签中获取信息,但是标题中的撇号撇开了一切.
对于解析我使用Grab.
来自源代码:
<img src='somelink' border='0' alt='commission:Alfred\'s misadventures' title='commission:Alfred\'s misadventures'>
Run Code Online (Sandbox Code Playgroud)
实际XPath:
g.xpath('.//tr/td/a[3]/img').get('title')
Run Code Online (Sandbox Code Playgroud)
返回
commission:Alfred\\
Run Code Online (Sandbox Code Playgroud)
有没有什么办法解决这一问题?
谢谢
我正在尝试向网络应用发送POST请求.我正在使用mechanize模块(本身是urllib2的包装器).无论如何,当我尝试发送POST请求时,我得到了UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 0: ordinal not in range(128).我试图把unicode(string)的unicode(string, encoding="utf-8"),unicode(string).encode()等等,没有什么工作-无论是返回的错误之上,或TypeError: decoding Unicode is not supported
我查看了类似问题的其他SO答案,但都没有帮助.
提前致谢!
编辑:产生错误的示例:
prda = "š???" #valid UTF-8 characters
prda # typing in python shell
'\xc5\xa1\xc4\x91\xc4\x87\xc4\x8d'
print prda # in shell
š???
prda.encode("utf-8") #in shell
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 0: ordinal not in range(128)
unicode(prda)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 0: …Run Code Online (Sandbox Code Playgroud) 如果用户点击另一个窗口,我试图将焦点放在窗口上.
现在我有两个窗口:窗口A在后面,窗口B在前面.当Window B出现时,它会禁用Window A.现在我想要的是每当用户点击Window B之外时,它应该将焦点返回到Window B.
这是Window B的代码:
class window_b(QtGui.QDialog):
def __init__(self,parent=None):
super(window_b, self).__init__(parent)
window_a.setEnabled(False)
self.ui = Ui_Form_window_b()
self.ui.setupUi(self)
self.setFocusPolicy(QtCore.Qt.StrongFocus)
def focusOutEvent(self,event):
self.setFocus(True)
self.activateWindow()
self.raise_()
self.show()
Run Code Online (Sandbox Code Playgroud)
我试过setFocus和activateWindow,但它没有把焦点返回到窗口B.
有什么建议?
我正在使用QtCore.QThread(来自PyQt4).
要记录,我还使用以下格式化程序:
logging.Formatter('%(levelname)-8s %(asctime)s %(threadName)-15s %(message)s')
生成的日志是:
DEBUG 2012-10-01 03:59:31,479 Dummy-3 my_message
我的问题是我想更明确地知道哪个线程正在记录... Dummy-3对我来说不是最明确的名字....
有没有办法将一个名称设置为一个QtCore.QThread可供日志记录模块使用的名称(作为LogRecord属性),以使日志更有意义?
谢谢 !
我有这个代码:
myEdit = QLineEdit()
myQFormLayout.addRow("myLabelText", myEdit)
Run Code Online (Sandbox Code Playgroud)
现在我必须通过引用删除行myEdit:
myQformLayout.removeRow(myEdit)
Run Code Online (Sandbox Code Playgroud)
但是没有API.我可以使用.takeAt(),但我怎么能得到这个论点?如何找到标签索引或索引myEdit?
我在Python 2.7中使用PySide 1.2.1,我需要一个小部件来绘制彩色背景.在Qt Designer中,我创建了一个简单的窗口,其中包含一个标签,一个包含三个其他项目和另一个标签的小部件.对于包含按钮的小部件,单选按钮和复选框我将styleSheet属性设置为background-color: #FFFFFF.在Qt Designer中,所有内容都根据需要呈现:

但是在Pyside中,小部件不会绘制背景颜色 - 但是它上面的项目会正确地继承颜色:

这是ui-XML:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>276</width>
<height>133</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QVBoxLayout" name="verticalLayout" stretch="0,1,1">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>The following should have white background:</string>
</property>
</widget>
</item>
<item>
<widget class="QWidget" name="widget" native="true">
<property name="styleSheet">
<string notr="true">background-color: #FFFFFF</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>PushButton</string>
</property> …Run Code Online (Sandbox Code Playgroud)