我想创建一个由多个具有共享x/y轴的子图组成的图.它应该从文档中看起来像这样(虽然我的子图将是scatterblots):( 这里的代码)
但我想动态创建子图!
因此子图的数量取决于前一个函数的输出.(每个图表可能大约有3到15个子图,每个子图来自不同的数据集,具体取决于我的脚本输入.)
谁能告诉我如何实现这一目标?
我正在尝试使用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
是空的.但是,一旦输入数据,我该如何访问输入数据?
我正在开发一个小的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
内部,并pack
与grid
合不来.但是,我喜欢网格,并且不愿重新设计我的整个GUI只是为了能够使用NavigationToolbar.
有解决方法,所以我可以通过网格使用NavigationToolbar2TkAgg吗?(我已经找到了意见,"继承和过载" 在这里,但不知道该怎么做.)
任何帮助非常感谢!
我正在尝试将对象追加到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尝试过这个,并得到了同样的错误.)
谢谢你的帮助!
我正在处理这样的字符串:"125A12C15"
我需要在字母和数字之间的边界处将它们分开,例如,这应该成为["125","A","12","C","15"]
.
有没有更优雅的方法在Python中执行此操作,而不是通过位置检查它是否是一个字母或数字,然后相应地连接?例如,这种东西的内置功能或模块?
感谢您的任何指示!
这是这个问题的后续行动.在那里,我们创建了一个可编辑的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) 我正在使用 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,这没有问题,但是当有很多小部件时,这就变得可取了。)
任何帮助将不胜感激!
我有一个父小部件,它在某些情况下调用自定义 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) 我已经使用 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) 有没有一种优雅的 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 ×9
tkinter ×3
grid ×2
matplotlib ×2
pyqt5 ×2
dictionary ×1
fastapi ×1
get ×1
gui-testing ×1
json ×1
list ×1
pydantic ×1
pyqt ×1
python-3.x ×1
split ×1
string ×1