我有一个端点,它接受一个文件和一个通过表单主体传递的字符串参数。但我在调试时注意到:
import uvicorn
from fastapi import FastAPI, File, Form
app = FastAPI()
@app.post('/test')
def test(test_item: str = Form(...), test_file: bytes = File(...)):
return {
"test_item": test_item,
"test_file_len": len(test_file),
"test_file_contents": test_file.decode('utf-8')
}
if __name__ == '__main__':
uvicorn.run(app, host="0.0.0.0", port=8000)
Run Code Online (Sandbox Code Playgroud)
使用这个简单的curl命令和其中包含一些文本的test_file.txt:
curl localhost:8000/test -X POST -F test_file=@"test_file.txt" -F test_item="test"
Run Code Online (Sandbox Code Playgroud)
没有处理这个错误:
{
"detail": [
{
"loc": [
"body",
"test_file"
],
"msg": "byte type expected",
"type": "type_error.bytes"
}
]
}
Run Code Online (Sandbox Code Playgroud)
但有趣的是,这确实有效:
import uvicorn
from fastapi import FastAPI, File, Form
app = FastAPI()
@app.post('/test')
def …Run Code Online (Sandbox Code Playgroud) 我的程序有一个表格,并且希望能够右键单击该表格中的一个单元格,并生成适当的操作来操作该单元格(不同单元格的不同操作集)。我的测试代码只有一个生成表格的小部件,在视口上安装一个事件过滤器以找出右键单击了哪个单元格。
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QAction, QMenu, QTableWidget, QTableWidgetItem, QVBoxLayout
from PyQt5 import QtCore
class TestRightClickTableWidget(QWidget):
def __init__(self):
super().__init__()
self.tableWidget = QTableWidget()
self.tableWidget.setRowCount(4)
self.tableWidget.setColumnCount(2)
self.tableWidget.setItem(0, 0, QTableWidgetItem("Cell 1"))
self.tableWidget.setItem(0, 1, QTableWidgetItem("Cell 2"))
self.tableWidget.setItem(1, 0, QTableWidgetItem("Cell 3"))
self.tableWidget.setItem(1, 1, QTableWidgetItem("Cell 4"))
self.tableWidget.setItem(2, 0, QTableWidgetItem("Cell 5"))
self.tableWidget.setItem(2, 1, QTableWidgetItem("Cell 6"))
self.tableWidget.setItem(3, 0, QTableWidgetItem("Cell 7"))
self.tableWidget.setItem(3, 1, QTableWidgetItem("Cell 8"))
self.tableWidget.viewport().installEventFilter(self)
self.layout = QVBoxLayout()
self.layout.addWidget(self.tableWidget)
self.setLayout(self.layout)
def eventFilter(self, source, event):
if(event.type() == QtCore.QEvent.MouseButtonPress and
event.buttons() == QtCore.Qt.RightButton and
source is self.tableWidget.viewport()): …Run Code Online (Sandbox Code Playgroud) 我正在尝试制作一个可以执行各种不同操作的工具箱小部件。但我在 QScrollArea 的布局管理方面遇到了麻烦。在代码的剥离版本之后,我有:
from PyQt5 import QtWidgets
import sys
class MyScrollWidget(QtWidgets.QWidget):
def __init__(self):
super(MyScrollWidget, self).__init__()
scrollArea = QtWidgets.QScrollArea(self)
top_widget = QtWidgets.QWidget()
top_layout = QtWidgets.QVBoxLayout()
for i in range(10):
group_box = QtWidgets.QGroupBox()
group_box.setTitle('GroupBox For Item {0}'.format(i))
layout = QtWidgets.QHBoxLayout(group_box)
label = QtWidgets.QLabel()
label.setText('Label For Item {0}'.format(i))
layout.addWidget(label)
push_button = QtWidgets.QPushButton(group_box)
push_button.setText('Run Button')
push_button.setFixedSize(100, 32)
layout.addWidget(push_button)
group_box.setLayout(layout)
top_layout.addWidget(group_box)
top_widget.setLayout(top_layout)
scrollArea.setWidget(top_widget)
self.resize(200, 500)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
widget = MyScrollWidget()
widget.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
但这只给了我滚动的小部件的一小部分固定部分。但我真正想要的是,如果小部件/窗口小于所有组框的总大小,则整个小部件可以滚动。即,我希望使用该小部件,就像它都是固定宽度一样,但如果用户将小部件调整为小于该宽度,它将适当滚动。我尝试了各种不同的方法,但没有取得好的结果,所以现在我听从那些在布局管理方面比我更有经验的人。谢谢您的宝贵时间。
所以我有一个图表,运行一个数量级10000个时间步,因此我有很多数据点和xticks相隔很远,这很酷,但我想在xaxis上显示点正在绘制数据的位置.在这种情况下,我要显示的xtick是271.因此有一种方法可以在x轴上"插入"271刻度,因为我已经知道我想要显示什么刻度线?
pyqt ×2
pyqt5 ×2
python ×2
fastapi ×1
matplotlib ×1
plot ×1
pydantic ×1
python-3.6 ×1
qgroupbox ×1
qscrollarea ×1
qt ×1
qt5 ×1