小编She*_*Rox的帖子

PyQt4:更改操作上的按钮图标

我正在尝试更改特定操作的按钮图标。(点击、禁用等)

举个例子,让我们按下按钮,如果我有一个按钮:

btn = QtGui.QPushButton(" ", self)
btn.resize(100, 100)
btn.move(0, 0)
btn.setIcon(QtGui.QIcon(""))
btn.setIconSize(QtCore.QSize(100, 100))
Run Code Online (Sandbox Code Playgroud)

单击时如何更改其图标?我需要发出点击信号吗?

btn.clicked.connect(self.some_function_that_shows_new_icon)

如果是这样,我怎样才能使禁用信号或任何其他按钮条件可用?

例子:

btn.disabled.connect(self.some_function_that_shows_new_icon)

(将检测按钮是否禁用的信号,上面的一个不起作用)

python pyqt pyqt4

2
推荐指数
1
解决办法
6862
查看次数

如何正确地将django csrf_token附加到内联javascript中?

我在javascript中动态创建了表单元素:

var selectform = document.createElement("form")

我已将其他输入元素和这些属性添加到selectform:

   submitnselection.setAttribute('type',"submit");
   submitnselection.setAttribute('value',"Submit");
   submitnselection.setAttribute("name","submitnpage");
   selectform.setAttribute("method", "post")
   selectform.setAttribute = ("action", "/test")
   "{% csrf_token %}";
Run Code Online (Sandbox Code Playgroud)

在HTML中,添加{% csrf_token %}模板标签会起作用,但在这种情况下javascript我得到403禁止错误:

CSRF令牌丢失或不正确.

我找到了一些解决方案,但没有什么对我有用,有没有办法{% csrf_token %}只使用Django,Javascript和普通的Jquery 添加到表单?另请注意,此脚本位于html内部,因此我认为{% csrf_token %}模板标记可以正常工作.

html javascript django jquery

2
推荐指数
1
解决办法
1558
查看次数

如何在PyQt4中创建多页面应用程序?

我对此问题进行了一些研究,但找不到任何简单的答案或教程来完成此任务。


我正在尝试找到一个小部件,它将使用QPushButton在页面之间进行转换。我听说过QStackWidget,但是我不确定如何使用它,我找到了很多教程,但是所有教程都很难理解。


因此,例如,我有一个窗口类:

import sys
from PyQt4 import QtGui, QtCore

class Window(QtGui.QMainWindow):
Run Code Online (Sandbox Code Playgroud)

如何将QStackWidget添加到此类?(没有任何布局)

如果这样做,如何使用QPushButton切换到特定页面?(在一个索引中添加多个小部件)

extra:是否可以对过渡添加某种效果?如褪色等

python qt pyqt pyqt4

1
推荐指数
1
解决办法
3153
查看次数

PyQt:获取哪个按钮调用了特定功能

我在PyQt(通常是一个测验游戏)中制作了一个多页面应用程序。

因此,现在每当用户犯错或正确回答问题时,它就会调用正确/错误函数。


错误的回答功能:

def incorrect(self):
    self.pic3.hide()
    self.que1.hide()
    self.answ.hide()
    self.answ1.hide()
    self.answ2.hide()
    self.pic4.setGeometry(0, 0, 1280, 800)
    self.pic4.show()
    self.goback.show() 
    self.cont = QtGui.QPushButton(self)
    self.cont.setObjectName('cont')
    self.cont.setStyleSheet("#cont {background-image: url(':/images/Continue.png'); border: none; }"
    "#cont:hover { background-image: url(':/images/Continue1.png'); }"
    "#cont:pressed { background-image: url(':/images/Continue2.png'); }")
    self.cont.setGeometry(980, 610, 300, 300)
    self.cont.clicked.connect(self.question2)
    self.cont.show()
    self.heart2.hide()
    #self.heart1.hide()
    if ( self.heart2.isHidden() and self.heart1.isHidden() ):
        gameover()
    else:
        pass
Run Code Online (Sandbox Code Playgroud)

所以我要在此函数中创建多个“ cont”小部件,其目的是因为我希望它继续针对特定的问题(如果用户在问题1处失败或成功,则应该继续对问题2进行回答)。

但是为此,应该有一个代码来确定是否从button1button2调用了不正确的答案功能,单击时两个按钮都连接到同一插槽,如果从button1调用了它,它将显示cont按钮,单击该按钮时将显示question2小部件。 (Question2页)。

但是,如果它是从button2调用的,它将显示cont2按钮,单击该按钮将显示问题3页面。

它在代码中应该看起来像这样

if self.connected from button1: …
Run Code Online (Sandbox Code Playgroud)

python pyqt pyqt4

1
推荐指数
1
解决办法
1891
查看次数

递增到以零开头的数字

关于将整数转换为由零引导的数字有很多问题,但我找不到任何解决方案来增加已经由零引导的字符串。

Python 已经将数字以零为单位转换为正常整数:

>>> 0001
1
>>> int(0001)
1
Run Code Online (Sandbox Code Playgroud)

考虑到这一点,每当我将两个以零为首的数字相加时,我都会得到一个正常的整数:

>>> 0001 + 0001
2
>>> int('0001') + int('0001')
2
Run Code Online (Sandbox Code Playgroud)

但是,我想知道的是,例如,如何获得总和,例如0002将两个相加时0001

显然它应该打印为字符串类型,因为 Python 将数字以零为首的数字转换为普通整数。

还请考虑这样的一些情况:

x = 0001

如何在不指定零的情况下将 x 增加 1?


有没有 Pythonic 的方法来做到这一点?解决方案适用于所有以零为首的数字情况?('0001' + '0001' == '0002' and '01' + '01' == '02',例如)。

python numbers

1
推荐指数
1
解决办法
797
查看次数

为什么 QuerySet 迭代这么慢?

我正在尝试为系统创建准确且高效的搜索算法。我安装了 Postgresql 来利用它的三元组相似性查询,这就是我搜索对象的方式:

objects_found = Question.objects.extra(where=["CHAR_LENGTH(answer) > 300"])).filter(question__trigram_similar=message
Run Code Online (Sandbox Code Playgroud)

这速度快得令人难以置信,执行大部分查询只用了不到 0.5 秒的时间。查询集的所有对象objects_found都与查询文本相似,但我需要找出最相似的一个。

我知道在这种情况下有两种非常好的算法,第一个是余弦相似度,第二个是Ratcliff/Obershelp 模式识别它在 Python 中有内置实现)。

我尝试进行一次迭代,对它们中的每一个进行测试,在大多数情况下,余弦相似度大约快 1.5 倍(正如预期的那样,考虑到向量的测量速度要快得多),但 SequenceMatcher 会给出更准确的结果。所以我还是选择了SequenceMatcher。请注意,这次迭代花了很长时间。

最后,我尝试在代码中实现SequenceMatcher:

objects_found = (Question.objects.extra(where=["CHAR_LENGTH(answer) > 300"])).filter(question__trigram_similar=message).iterator()
zsim = ("", 0)
for i in objects_found:
    rsim = _search.ratcliff_obershelp(querytext, i.question)
    if zsim[1] < rsim:
       zsim = (i.answer, rsim)
       if rsim > 0.75:  # works in most of the cases
            break
response = zsim[0]
Run Code Online (Sandbox Code Playgroud)

数据库中有约 1GB 的约 500 万行,postgresql 需要不到 0.5 秒的时间来选择具有三元相似性的正确行。在大约 500 万行中,只有 10-90 …

python django postgresql django-queryset

1
推荐指数
1
解决办法
1486
查看次数

将字符串拆分为不同长度的块

为了正确格式化字符串,我需要将其拆分为不同长度的块.

作为一个例子,这是一个字符串 - 25c319f75e3fbed5a9f0497750ea12992b30d565,为了将它拆分成固定长度的块,我只需使用步骤和切片:

s = '25c319f75e3fbed5a9f0497750ea12992b30d565'
n = 2
print("-".join([s[i:i+n] for i in range(0, len(s), n)]))
Run Code Online (Sandbox Code Playgroud)

但是,如果n要拆分的数字列表,我该怎么办?例如:

s = '25c319f75e3fbed5a9f0497750ea12992b30d565'
n = [8, 4, 4, 4, 4, 12] # edited for consistency - Coldspeed
Run Code Online (Sandbox Code Playgroud)

我做的唯一解决方案是:

print("-".join([s[0:8], s[8:12], s[12:16], s[16:20], s[20:24], s[24:32]]))
Run Code Online (Sandbox Code Playgroud)

哪个不是pythonic,更不一定不可靠的字符串长度很大.

最后一个代码示例的输出:

25c319f7-5e3f-bed5-a9f0-4977-50ea1299
Run Code Online (Sandbox Code Playgroud)

那么这可以用更多的pythonic单线方式来完成吗?如果没有,还有什么其他更自动的方法呢?

python loops

0
推荐指数
2
解决办法
1133
查看次数

标签 统计

python ×6

pyqt ×3

pyqt4 ×3

django ×2

django-queryset ×1

html ×1

javascript ×1

jquery ×1

loops ×1

numbers ×1

postgresql ×1

qt ×1