小编K.M*_*ier的帖子

PyQt5 中基于 QScintilla 的文本编辑器,具有可点击的函数和变量

我正在尝试使用 PyQt5 中的基本语法突出显示、代码完成和可点击的函数和变量来制作一个简单的文本编辑器。我最大的希望是使用 PyQt5 的 QScintilla 端口

我在 Eli Bendersky 网站 ( http://eli.thegreenplace.net/2011/04/01/sample-using-qscintilla-with-pyqt )上找到了以下基于 QScintilla 的文本编辑器示例,Victor S. 已将其改编为 PyQt5 )。我认为这个例子是一个很好的起点:

#-------------------------------------------------------------------------
# qsci_simple_pythoneditor.pyw
#
# QScintilla sample with PyQt
#
# Eli Bendersky (eliben@gmail.com)
# This code is in the public domain
#-------------------------------------------------------------------------
import sys

import sip
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.Qsci import QsciScintilla, QsciLexerPython


class SimplePythonEditor(QsciScintilla):
    ARROW_MARKER_NUM = 8

    def __init__(self, parent=None):
        super(SimplePythonEditor, self).__init__(parent)

        # Set the default …
Run Code Online (Sandbox Code Playgroud)

python pyqt python-3.x qscintilla pyqt5

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

STM32内部时钟

我对STM32F7器件(STMicroelectronics的Cortex-M7微控制器)上的时钟系统感到困惑.参考手册没有充分说明这些时钟之间的差异:

  • SYSCLK
  • HCLK
  • FCLK

参考手册在"5.2时钟>> "章节中读取."RCC通过AHB时钟(HCLK)除以8来提供Cortex系统定时器(SysTick)的外部时钟".
这个陈述与CubeMX的数字相矛盾.请注意,在CubeMX中,我可以选择从HCLK到'Cortex系统定时器'的预分频器.它不一定是8分.

在此输入图像描述

arm clock stm32 cortex-m stm32f7

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

您自己的PyQt4 GUI中的Matplotlib动画

我正在用Python编写软件.我需要将Matplotlib时间动画嵌入到自制的GUI中.以下是有关它们的更多详细信息:

1. GUI

GUI也是用Python编写的,使用PyQt4库.我的GUI与您在网上可以找到的常见GUI没有太大区别.我只是继承QtGui.QMainWindow并添加一些按钮,布局,......

2.动画

Matplotlib动画基于animation.TimedAnimation类.这是动画的代码:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D
import matplotlib.animation as animation

        class CustomGraph(animation.TimedAnimation):

        def __init__(self):

            self.n = np.linspace(0, 1000, 1001)
            self.y = 1.5 + np.sin(self.n/20)
            #self.y = np.zeros(self.n.size)


            # The window
            self.fig = plt.figure()
            ax1 = self.fig.add_subplot(1, 2, 1)
            self.mngr = plt.get_current_fig_manager() 
            self.mngr.window.setGeometry(50,100,2000, 800)

            # ax1 settings
            ax1.set_xlabel('time')
            ax1.set_ylabel('raw data')
            self.line1 = Line2D([], [], color='blue')
            ax1.add_line(self.line1)
            ax1.set_xlim(0, 1000)
            ax1.set_ylim(0, 4)


            animation.TimedAnimation.__init__(self, self.fig, interval=20, blit=True)


        def …
Run Code Online (Sandbox Code Playgroud)

python animation pyqt matplotlib pyqt4

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

从头开始构建 Eclipse IDE - 制作更大的图标有时会成功

即使是最新的 Eclipse Neon 版本在 4k 显示器上仍然有一些小图标。这就是为什么我试图让它们变得更大。为此,我从头开始构建 Eclipse IDE。 在此处输入图片说明

请阅读此 StackOverflow 问题以了解我是如何做到的:

从头开始构建 Eclipse IDE - 如何选择 CDT 而不是 JDT?

我编写了一个 Windows 批处理文件,它运行在所有文件夹中并更改它可以找到的每个图标的大小。在我的批处理文件,我相信每一个.png.gif.bmp.jpg并且.ico其尺寸文件低于48×48像素的图标。我把尺寸加倍。

我在开始构建之前运行该批处理文件。

我得到了好坏参半的结果。下图显示一些图标确实变大了 - 但其他图标没有。以debug icon. 看起来它的尺寸仍然是旧的 16x16 像素。也许我的批处理文件不完整,它以某种方式跳过了那个。所以我检查了 eclipse 源代码文件夹并找到了debug icon. 它是 32x32 像素!所以我的批处理文件是正确的。为什么eclipse构建不能正确使用它?

在此处输入图片说明

任何帮助将非常感激。如果我成功使所有图标变大,我保证与所有人分享解决方案(并提及您的贡献):-)

我相信小的 Eclipse 图标对于所有具有高 dpi 显示器的人或那些没有鹰眼的人来说都是一个真正的痛苦。开发代码不应该是那些视力敏锐的人的特权——它应该是所有人都可以访问的。


PS:我还有一些与 Eclipse“从头开始构建”主题相关的其他问题。如果你有兴趣:

让我们大家联合起来自己构建 Eclipse IDE …

java eclipse icons maven

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

无法在 Python 3.5 中对多处理队列进行子类化

我的最终目标是将stdout几个子进程重定向到一些队列,并将它们打印在某处(可能在一个小 GUI 中)。

第一步是将子类Queue化为一个行为与stdout. 但这就是我被卡住的地方。Queue在 Python v3.5 中子类化多处理似乎是不可能的。

# This is a Queue that behaves like stdout
# Unfortunately, doesn't work in Python 3.5   :-(
class StdoutQueue(Queue):
    def __init__(self,*args,**kwargs):
        Queue.__init__(self,*args,**kwargs, ctx='')

    def write(self,msg):
        self.put(msg)

    def flush(self):
        sys.__stdout__.flush()
Run Code Online (Sandbox Code Playgroud)

我在下面的帖子中找到了这个片段(可能当时 Python 3.5 还不存在):Python multiprocessing redirect stdout of a child process to a Tkinter Text

在 Python v3.5 中,您在继承多处理Queue类时会偶然发现奇怪的错误消息。我发现了两个描述该问题的错误报告:

https://bugs.python.org/issue21367

https://bugs.python.org/issue19895

我有两个问题:

  1. 假设我想坚持使用 Python v3.5 - 使用以前的版本并不是一个真正的选择。我可以使用什么解决方法以某种方式对多处理队列进行子类化?
  2. 如果我升级到 Python v3.6,错误是否仍然存在?

编辑 : …

python multiprocessing python-3.x python-multiprocessing

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

应用程序线程和 Qt 线程之间的干净分离(Python - PyQt)

我更喜欢在不考虑图形用户界面的情况下编写我的应用程序。一旦应用程序代码正常工作,我喜欢在它上面粘贴一个 GUI 层——两者之间有一个干净的界面。

我首先尝试使 GUI 在与应用程序不同的进程中运行。但我很快就后悔了那个实验。在两个进程之间建立通信链接绝非易事。所以我决定现在,多线程没问题(尽管 Python Global Interpreter Lock 使它们在单个内核上运行)。

MainThread完全是在Qt的图形用户界面的手中。显然这是标准做法。所以让我们假设软件的整体结构应该是这样的(注意qtThreadMainThread 的同义词):

在此处输入图片说明

我的应用程序代码在appThread 中运行- 与 GUI 完全分离。但在某些时候,必须有互动。

我已经阅读了很多关于如何组织它的文章,但许多来源相互矛盾。根据很多人的说法,即使是官方的 Qt 应用程序也是错误的(官方文档鼓励对 QThread 进行子类化)。我能找到的最有启发性的文章是这些:

http://ilearnstuff.blogspot.be/2012/08/when-qthread-isnt-thread.html http://ilearnstuff.blogspot.be/2012/09/qthread-best-practices-when-qthread.html

即使考虑了所有这些,我仍然对一些事情保持怀疑。


问题 1. 启动appThread最合适的方式是什么


启动appThread的最正确方法是什么?如果我错了,请纠正我,但我认为有两种选择:

选择 1:启动标准 Python 线程
Python 提供了threading可以导入以生成新线程的库:

import threading

if __name__ == '__main__':
    # 1. Create the qt thread (is MainThread in fact)
    qtApp = QApplication(sys.argv)
    QApplication.setStyle(QStyleFactory.create('Fusion'))

    # 2. …
Run Code Online (Sandbox Code Playgroud)

python multithreading python-3.x

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

Windows上的通用标签

我是ctags的新手。阅读有关程序的一些信息后,我得出结论,“通用ctags”是最新版本(“丰富的ctags”的后继版本),并且仍在积极开发中:https ://ctags.io/

大多数人在Linux上使用它。由于某些特定原因,我需要在Windows上使用它(更准确地说,是Windows 10,64位)。我正在寻找通用ctags的可执行文件。
您知道在哪里下载这样的可执行文件吗?

PS:我对cygwin方法不感兴趣(再次出于某些特定原因,但这会使我们在这里走得太远了)。
编辑:为了更好地了解ctags输出,请参考以下问题:了解ctags文件格式

ctags windows-10

6
推荐指数
2
解决办法
3641
查看次数

如何在布局中间插入 QWidget?

我正在使用 Qt 框架来构建我的图形用户界面。我使用QGridLayout来整齐地放置我的 QWidget。
图形用户界面如下所示:

在此输入图像描述

我的应用程序定期在运行时向 GUI 添加新的小部件。这些新的小部件通常不会添加在 QLayout 的末尾,而是添加在中间的某个位置。

执行此操作的过程有点麻烦。应用到上图中,我需要从 QGridLayout 中取出widg_C, , ... 。widg_D接下来,我添加widg_xwidg_y,最后我再次将其他小部件放回去。
这就是我从 QGridLayout 中删除小部件的方法:

for i in reversed(range(myGridLayout.count())):
    self.itemAt(i).widget().setParent(None)
###
Run Code Online (Sandbox Code Playgroud)

只要您处理的是少量小部件,这个过程就不是一场灾难。但在我的应用程序中,我显示了很多小部件 - 也许 50 个或更多!当这个过程正在进行时,应用程序会冻结一秒钟,这对用户来说非常烦人。
有没有一种方法可以在 QLayout 中的某个位置插入小部件,而不需要取出其他小部件?


编辑:显然 QVBoxLayout 的解决方案非常简单。只需使用该函数insertWidget(..)而不是addWidget(..). 可以通过此链接找到文档:http://doc.qt.io/qt-5/qboxlayout.html#insertWidget
不幸的是,我找不到 QGridLayout 的类似功能。


编辑:许多人正确地提到,放回大量小部件不应导致性能问题 - 它确实非常快(谢谢@ekhumoro 指出这一点)。显然,我面临的性能问题与将小部件放回原处的算法有关。这是一个相当复杂的递归算法,它将每个小部件放在 QGridLayout 中的正确坐标上。这导致我的显示器出现“闪烁”。小部件被取出,然后放回内部,有一些延迟(由于算法) - 导致闪烁。


编辑:我找到了一个解决方案,这样我可以轻松地将新行插入到 QGridLayout 中。插入新行意味着我不需要从头开始取出并替换所有小部件 - 因此我避免了运行昂贵的递归算法。
解决方案可以在我下面的回答中找到。

python qt pyqt python-3.x pyqt5

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

STM32H743 微控制器 (Cortex-M7) 的此链接描述文件中是否使用了所有 RAM 部分?

我知道最新的 STM32 微控制器中的 RAM 存储器包含几个具有显着速度差异的部分。这就是为什么我试图围绕这些设备的链接描述文件(注意:arm-none-eabi-gcc工具链)。不幸的是,CubeMX 为 STM32F767ZI 生成的链接描述文件只是忽略了 RAM 中的不同部分:

/* Specify the memory areas */
MEMORY
{
  RAM (xrw)      : ORIGIN = 0x20000000, LENGTH = 512K
  FLASH (rx)      : ORIGIN = 0x8000000, LENGTH = 2048K
}
Run Code Online (Sandbox Code Playgroud)

 
STMicroelectronics 似乎已经做了一些努力,使其最新的STM32H743ZI的链接描述文件更加复杂:

/* Specify the memory areas */
MEMORY
{
  DTCMRAM (xrw)      : ORIGIN = 0x20000000, LENGTH = 128K
  RAM_D1 (xrw)      : ORIGIN = 0x24000000, LENGTH = 512K
  RAM_D2 (xrw)      : ORIGIN = 0x30000000, LENGTH = 288K …
Run Code Online (Sandbox Code Playgroud)

microcontroller gcc arm stm32 linker-scripts

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

如何在我的makefile中提示用户输入[y / n](使用纯make语法)?

我正在编写一个在Windows和Linux上都可以使用的makefile。因此,我尽可能避免使用特定于OS的Shell命令。

这是我的makefile中的片段,clean最后是函数:

# OS specific part
# -----------------
ifeq ($(OS),Windows_NT)
    RM = del /F /Q
    RMDIR = -RMDIR /S /Q
    MKDIR = -mkdir
    ERRIGNORE = 2>NUL || (exit 0)
    SEP=\\
else
    RM = rm -rf 
    RMDIR = rm -rf 
    MKDIR = mkdir -p
    ERRIGNORE = 2>/dev/null
    SEP=/
endif
PSEP = $(strip $(SEP))

# Definitions for nullstring and space
# -------------------------------------
nullstring :=
space := $(nullstring) #End

# Lists of all files and folders to keep or remove
# …
Run Code Online (Sandbox Code Playgroud)

shell makefile gnu-make

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