小编Cod*_*Cat的帖子

在matplotlib中动态添加/创建子图

我想创建一个由多个具有共享x/y轴的子图组成的图.它应该从文档中看起来像这样(虽然我的子图将是scatterblots):( 这里的代码)

3个子图共享x和y轴

但我想动态创建子图!

因此子图的数量取决于前一个函数的输出.(每个图表可能大约有3到15个子图,每个子图来自不同的数据集,具体取决于我的脚本输入.)

谁能告诉我如何实现这一目标?

python matplotlib

34
推荐指数
3
解决办法
4万
查看次数

为什么Tkinter Entry的函数返回什么?

我正在尝试使用Entry字段来获取手动输入,然后使用该数据.

我发现的所有消息都声称我应该使用该get()功能,但我还没有找到一个简单的工作迷你示例,我无法让它工作.

我希望有人可以告诉我我做错了什么.这是一个迷你文件:

from tkinter import *


master = Tk()

Label(master, text="Input: ").grid(row=0, sticky=W)

entry = Entry(master)
entry.grid(row=0, column=1)

content = entry.get()
print(content)  # does not work

mainloop()
Run Code Online (Sandbox Code Playgroud)

这给了我一个Entry我可以输入的字段,但是一旦输入数据,我就无法对数据做任何事情.

我怀疑我的代码不起作用,因为最初entry是空的.但是,一旦输入数据,我该如何访问输入数据?

python get tkinter python-3.x tkinter-entry

21
推荐指数
2
解决办法
10万
查看次数

通过网格在Tkinter中显示Matplotlib导航工具栏

我正在开发一个小的Tkinter GUI来绘制matplotlib图.(它包含几个条目,并根据其内容组装图.)

我根据http://matplotlib.org/examples/user_interfaces/embedding_in_tk.html设计了我的绘图小部件,只使用网格而不是包:

canvas = FigureCanvasTkAgg(fig, master=root)
canvas.get_tk_widget().grid(row=1,column=4,columnspan=3,rowspan=20)
Run Code Online (Sandbox Code Playgroud)

那部分有效.但是以相同的方式嵌入NavigationToolbar却没有.当我包含这些行时,Tkinter会在没有错误的情况下崩溃:

toolbar = NavigationToolbar2TkAgg( canvas, root )
canvas._tkcanvas.grid(row=22,column=4)
Run Code Online (Sandbox Code Playgroud)

我知道这是因为NavigationToolbar调用pack内部,并packgrid合不来.但是,我喜欢网格,并且不愿重新设计我的整个GUI只是为了能够使用NavigationToolbar.

有解决方法,所以我可以通过网格使用NavigationToolbar2TkAgg吗?(我已经找到了意见,"继承和过载" 在这里,但不知道该怎么做.)

任何帮助非常感谢!

grid tkinter matplotlib

16
推荐指数
2
解决办法
9312
查看次数

附加到defaultdict中的列表

我正在尝试将对象追加到defaultdict中的值列表:

dic = defaultdict(list)
groups = ["A","B","C","D"]

# data_list is a list of objects from a self-defined class. 
# Among others, they have an attribute called mygroup

for entry in data_list:
    for mygroup in groups:
        if entry.mygroup == mygroup:
            dic[mygroup] = dic[mygroup].append(entry)
Run Code Online (Sandbox Code Playgroud)

所以我想收集属于这个字典中一个组的所有条目,使用组名作为键,并将所有相关对象的列表作为值.

但是上面的代码引发了一个AttributeError:

    dic[mygroup] = dic[mygroup].append(entry)
AttributeError: 'NoneType' object has no attribute 'append'
Run Code Online (Sandbox Code Playgroud)

所以看起来由于某种原因,值不被识别为列表?

有没有办法附加到字典或defaultdict中用作值的列表?(我之前用普通的dict尝试过这个,并得到了同样的错误.)

谢谢你的帮助!

python dictionary

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

从字符串中的数字拆分字母

我正在处理这样的字符串:"125A12C15" 我需要在字母和数字之间的边界处将它们分开,例如,这应该成为["125","A","12","C","15"].

有没有更优雅的方法在Python中执行此操作,而不是通过位置检查它是否是一个字母或数字,然后相应地连接?例如,这种东西的内置功能或模块?

感谢您的任何指示!

python string split

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

在可编辑的QSqlQueryModel中实现setEditStrategy

这是这个问题的后续行动.在那里,我们创建了一个可编辑的QSqlQueryModel子类,用于复杂查询.现在我需要添加像QTableModel的setEditStrategy这样的功能,这样我就可以缓存所有更改并使用按钮接受或还原它们.PyQt显然不允许多重继承,我找不到足够的文档来在我的自定义模型中重新实现这个方法,因此这里有一个问题:

如何在可编辑的QSqlQueryModel中重新实现QSqlTableModel.setEditStragety(或类似的东西),包括RevertAll()和SubmitAll()?

这是一个CVME :(我已经评论了我希望工作的Example类的部分内容)

import sys

from PyQt5.QtCore import Qt
from PyQt5.QtSql import QSqlDatabase, QSqlQuery, QSqlQueryModel, QSqlTableModel
from PyQt5.QtWidgets import QApplication, QTableView, QWidget, QGridLayout
from PyQt5.Qt import QPushButton

db_file = "test.db"


def create_connection(file_path):
    db = QSqlDatabase.addDatabase("QSQLITE")
    db.setDatabaseName(file_path)
    if not db.open():
        print("Cannot establish a database connection to {}!".format(file_path))
        return False
    return True


def fill_tables():
    q = QSqlQuery()
    q.exec_("DROP TABLE IF EXISTS Manufacturers;")
    q.exec_("CREATE TABLE Manufacturers (Company TEXT, Country TEXT);")
    q.exec_("INSERT INTO Manufacturers VALUES ('VW', 'Germany');")
    q.exec_("INSERT INTO Manufacturers VALUES …
Run Code Online (Sandbox Code Playgroud)

python pyqt qsqltablemodel pyqt5 qsqlquerymodel

7
推荐指数
0
解决办法
397
查看次数

缩放 Tkinter 小部件

我正在使用 Tkinter 的“grid()”方法为我的 python 程序设计 GUI。

有没有办法让小部件随主窗口缩放?

这是一个简短的例子:

from Tkinter import *

master = Tk()

Label(master, text="This is a test").grid(row=0, column=0)

mytext1 = Text(master, width=30, height=5)
mytext1.grid(row=1, column=0)

mytext2 = Text(master, width=30, height=5)
mytext2.grid(row=3, column=0)

master.mainloop()
Run Code Online (Sandbox Code Playgroud)

我想做的是当主窗口的大小发生变化时,让小部件调整它们的大小。(对于如此小的 GUI,这没有问题,但是当有很多小部件时,这就变得可取了。)

任何帮助将不胜感激!

python grid tkinter

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

PyQt 单元测试创​​建了 QDialog

我有一个父小部件,它在某些情况下调用自定义 QDialog 来获取用户输入。如何编写单元测试以确保调用对话框并正确处理正确的输入?

这是一个小例子:

from PyQt5.QtWidgets import QDialog, QVBoxLayout, QWidget, QLabel, QApplication
from PyQt5.Qt import pyqtSignal, QPushButton, pyqtSlot, QLineEdit
import sys


class PopupDialog(QDialog):
    result = pyqtSignal(str)

    def __init__(self):
        super().__init__()
        layout = QVBoxLayout(self)
        self.setLayout(layout)
        lbl = QLabel("That's not a full number! Try again?")
        layout.addWidget(lbl)
        self.field = QLineEdit(self)
        layout.addWidget(self.field)

        self.btn = QPushButton("Ok")
        self.btn.clicked.connect(self.on_clicked)
        layout.addWidget(self.btn)

    def on_clicked(self):
        value = self.field.text().strip()
        self.result.emit(value)
        self.close()


class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.init_UI()

    def init_UI(self):
        layout = QVBoxLayout()
        self.setLayout(layout)

        lbl = QLabel("Please provide a full number")
        layout.addWidget(lbl)

        self.counter_fld …
Run Code Online (Sandbox Code Playgroud)

python gui-testing python-unittest pyqt5

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

将 pathlib.Path 数据发送到 FastAPI:PosixPath 不可 JSON 序列化

我已经使用 FastAPI 构建了一个 API,并尝试从客户端向它发送数据。

API 和客户端都使用类似的 Pydantic 模型来处理我要提交的数据。这包括一个包含文件路径的字段,我将其存储在 pathlib.path 类型的字段中。

然而,FastAPI 不接受提交,因为它显然无法处理路径对象:

TypeError: Object of type PosixPath is not JSON serializable

这是显示问题的最小测试文件:

import pathlib
from pydantic import BaseModel
from fastapi import FastAPI
from fastapi.testclient import TestClient


api = FastAPI()
client = TestClient(api)

class Submission(BaseModel):
    file_path: pathlib.Path

@api.post("/", response_model=Submission)
async def add_submission(subm: Submission):
    print(subm)
    # add submission to database
    return subm


def test_add_submission():
    data = {"file_path": "/my/path/to/file.csv"}
    print("original data:", data)

    # create a Submission object, which casts filePath to pathlib.Path:
    submission …
Run Code Online (Sandbox Code Playgroud)

python json pydantic fastapi

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

从 Python 列表中删除某些最终值

有没有一种优雅的 Pythonic 方式来执行类似rstrip()列表的操作?

想象一下,我有不同的列表:

l1 = ['A', 'D', 'D']
l2 = ['A', 'D']
l3 = ['D', 'A', 'D', 'D']
l4 = ['A', 'D', 'B', 'D']
Run Code Online (Sandbox Code Playgroud)

我需要一个函数来从给定列表中删除所有最终存在的 'D'元素(但不是那些位于其他元素之前或之间的元素!)。

for mylist in [l1, l2, l3, l4]:
    print(mylist, ' => ', remove_end_elements(mylist, 'D'))
Run Code Online (Sandbox Code Playgroud)

所以期望的输出是:

['A', 'D', 'D'] => ['A']
['A', 'D'] => ['A']
['D', 'A', 'D', 'D'] => ['D', 'A']
['A', 'D', 'B', 'D'] => ['A','D','B']
Run Code Online (Sandbox Code Playgroud)

完成这项工作的一种实现是这样的:

def remove_end_elements(mylist, myelement):
    counter = 0
    for element in mylist[::-1]:
        if element …
Run Code Online (Sandbox Code Playgroud)

python list

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