我一直在使用PyQt5开发GUI,并希望包含一个菜单栏.但是,当我编写此功能时,我的菜单不会出现.弄清楚我对如何在PyQt5中实现菜单栏的理解是关闭的,我在网上找了一个预先存在的例子.通过一些调整,我开发了以下测试用例:
import sys
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication, QMainWindow, QMenuBar, QAction, qApp
class Example(QMainWindow):
def __init__(self):
super().__init__()
exitAction = QAction(QIcon('exit.png'), '&Exit', self)
exitAction.triggered.connect(qApp.quit)
menubar = self.menuBar()
fileMenu = menubar.addMenu('&Testmenu')
fileMenu.addAction(exitAction)
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
然而,当我运行它时,Testmenu无处可寻.
我还尝试在QTCreator中创建菜单栏(以及我的GUI布局的其余部分),然后使用pyuic5将.ui文件转换为可导入的.py文件.我认为这会消除我的一些编程错误,但菜单栏仍然不会显示.有什么想法吗?
编辑:
我在Jupyter笔记本4.1版本中使用Python 3.5(Anaconda 4.1)运行此代码.我也在使用运行os 10.1l,PyQt 5.7和Qt 5.7.0版本的Macbook.
我已经意识到,如果我单击应用程序窗口然后单击返回窗口,菜单栏将变为响应 - 有效地不聚焦并聚焦应用程序.有了这些信息,我意识到我不是第一个注意到这个问题的人(见https://github.com/robotology/yarp/issues/457).不幸的是,我仍然不确定如何解决这个问题.
我在setup.py脚本中包含数据文件时遇到麻烦。我的程序包设置如下:
my_package/
setup.py
MANIFEST.in
my_package/
__init__.py
access_data.py
data_files/
my_data_file.csv
Run Code Online (Sandbox Code Playgroud)
我想my_data_file.csv在安装时包括该文件,以便可以读取access_data.py。为此,我在中使用了package_data关键字setuptools:
setup(...,
packages=['my_package'],
package_data={'my_package': ['./my_package/data_files/my_data_file.csv']},
include_package_data=True
)
Run Code Online (Sandbox Code Playgroud)
我还将文件包含在MANIFEST.in:
recursive-include my_package/data_files *
Run Code Online (Sandbox Code Playgroud)
setup.py似乎运行良好,并且不会引发任何错误。但是,当我导入程序包时,我得到一个文件找不到错误,因为my_data_file.csv丢失了。我尝试引用其他堆栈溢出问题(尤其是这个问题),但无法弄清楚我在做什么错。如何获取setup.py以包含必要的数据文件?
假设我对某个因变量y相对于某个自变量进行了多次测量x。我还记录了每次测量的不确定度dy。作为一个例子,这可能看起来像
import numpy as np
x = np.array([1, 2, 3, 4])
y = np.array([4.1, 5.8, 8.1, 9.7])
dy = np.array([0.2, 0.3, 0.2, 0.4])
Run Code Online (Sandbox Code Playgroud)
现在假设我希望测量值遵循线性关系y = mx + b,并且我想确定y_umn某些未测量的 x 值的y 值x_unm。如果不考虑错误,我可以很容易地在 Python 中执行线性拟合:
fit_params, residuals, rank, s_values, rcond = np.polyfit(x, y, 1, full=True)
poly_func = np.poly1d(fit_params)
x_unm # The unmeasured x value
y_unm = poly_func(x_unm) # The unmeasured x value
Run Code Online (Sandbox Code Playgroud)
我对这种方法有两个问题。首先是np.polyfit没有包含每个点的错误。其次,我不知道不确定性y_unm是什么。
有谁知道如何使数据与不确定性相匹配,从而使我能够确定 的不确定性y_unm …
我希望能够打开一个文件,在末尾附加一些文本,然后仅读取第一行。我确切知道文件的第一行有多长时间,并且文件足够大,我不想一次将其全部读入内存。我试过使用:
with open('./output files/log.txt', 'a+') as f:
f.write('This is example text')
content = f.readline()
print(content)
Run Code Online (Sandbox Code Playgroud)
但是打印语句为空。当我尝试使用open('./output files/log.txt')或open('./output files/log.txt', 'r+')代替open('./output files/log.txt', 'a+')它工作时,所以我知道它与'a+参数有关。我的问题是我必须附加到文件。我如何追加到文件并仍然获得第一行而不使用类似的东西
with open('./output files/log.txt', 'a+') as f_1:
f.write('This is example text')
with open('./output files/log.txt') as f_2:
content = f_2.readline()
print(content)
Run Code Online (Sandbox Code Playgroud) 我在这里遵循SQLAlchemy文档,以使用Postgres编写批量upsert语句。为了演示,我有一个简单的表MyTable:
class MyTable(base):
__tablename__ = 'mytable'
id = Column(types.Integer, primary_key=True)
test_value = Column(types.Text)
Run Code Online (Sandbox Code Playgroud)
创建通用插入语句非常简单:
from sqlalchemy.dialects import postgresql
values = [{'id': 0, 'test_value': 'a'}, {'id': 1, 'test_value': 'b'}]
insert_stmt = postgresql.insert(MyTable.__table__).values(values)
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是当我尝试添加upsert的“冲突时”部分。
update_stmt = insert_stmt.on_conflict_do_update(
index_elements=[MyTable.id],
set_=dict(data=values)
)
Run Code Online (Sandbox Code Playgroud)
尝试执行此语句会产生一个ProgrammingError:
from sqlalchemy import create_engine
engine = create_engine('postgres://localhost/db_name')
engine.execute(update_stmt)
>>> ProgrammingError: (psycopg2.ProgrammingError) can't adapt type 'dict'
Run Code Online (Sandbox Code Playgroud)
我认为我的误解是使用该on_conflict_do_update方法构造语句。有人知道如何构造此语句吗?我已经在StackOverflow上查看了其他问题(例如here),但似乎无法解决上述错误。
python ×5
file ×1
macos ×1
menubar ×1
numpy ×1
packaging ×1
postgresql ×1
pyqt ×1
pyqt5 ×1
python-3.x ×1
setup.py ×1
setuptools ×1
sqlalchemy ×1
statistics ×1
upsert ×1