python - 不通过 VSCODE 启动的 PySide2 应用程序
问题描述
我尝试编写一个非常简单的货币转换器应用程序,因此该脚本应该打开一个带有货币转换器的窗口。
但是当我在我的 Mac 上通过 VS Code 在 Python 终端中运行该文件时,它会打开一个没有响应的 Python 启动器窗口。当我在 IDLE 中打开这个脚本并运行它时,它运行良好(在我的 Mac 上)。
当我在我的 Windows10 笔记本电脑上通过 VS Code 在 Python 终端中运行相同的文件时,它运行良好。
我使用 Python 3.9 和相同的库(PySide2 和 currencyConverter 都安装在两个设备上)
from PySide2 import QtWidgets, QtGui, QtCore
import currency_converter
class App(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.c = currency_converter.CurrencyConverter()
self.setWindowTitle("Convertisseur de devises")
self.setup_ui()
self.setup_connections()
self.set_default_values()
self.setup_css()
self.resize(500, 50)
def setup_ui(self):
self.layout = QtWidgets.QHBoxLayout(self)
self.cbb_devisesFrom = QtWidgets.QComboBox()
self.le_montant = QtWidgets.QSpinBox()
self.cbb_devisesTo = QtWidgets.QComboBox()
self.le_montantConverti = QtWidgets.QSpinBox()
self.btn_inverser = QtWidgets.QPushButton("Inverser devises")
self.layout.addWidget(self.cbb_devisesFrom)
self.layout.addWidget(self.le_montant)
self.layout.addWidget(self.cbb_devisesTo)
self.layout.addWidget(self.le_montantConverti)
self.layout.addWidget(self.btn_inverser)
def setup_connections(self):
self.cbb_devisesFrom.activated.connect(self.compute)
self.cbb_devisesTo.activated.connect(self.compute)
self.le_montant.valueChanged.connect(self.compute)
self.btn_inverser.clicked.connect(self.inverser_devises)
def setup_css(self):
self.setStyleSheet("""
background-color: rgb(30, 30, 30);
color: rgb(240, 240, 240);
border: none;
""")
style = """
QComboBox::down-arrow {
image: none;
border-width: 0px;
}
QComboBox::drop-down {
border-width: 0px;
}
"""
self.cbb_devisesFrom.setStyleSheet(style)
self.cbb_devisesTo.setStyleSheet(style)
def set_default_values(self):
self.cbb_devisesFrom.addItems(sorted(list(self.c.currencies)))
self.cbb_devisesTo.addItems(sorted(list(self.c.currencies)))
self.cbb_devisesFrom.setCurrentText("EUR")
self.cbb_devisesTo.setCurrentText("EUR")
self.le_montant.setValue(100)
self.le_montantConverti.setValue(100)
self.le_montant.setRange(1, 1000000)
self.le_montantConverti.setRange(1, 1000000)
def compute(self):
montant = self.le_montant.value()
deviseFrom = self.cbb_devisesFrom.currentText()
deviseTo = self.cbb_devisesTo.currentText()
try:
resultat = self.c.convert(montant, deviseFrom, deviseTo)
except currency_converter.currency_converter.RateNotFoundError:
print("Rate not found")
else:
self.le_montantConverti.setValue(resultat)
def inverser_devises(self):
devise_from = self.cbb_devisesFrom.currentText()
devise_to = self.cbb_devisesTo.currentText()
self.cbb_devisesFrom.setCurrentText(devise_to)
self.cbb_devisesTo.setCurrentText(devise_from)
self.compute()
app = QtWidgets.QApplication([])
win = App()
win.show()
app.exec_()
解决方案
推荐阅读
- jenkins - circleCI 可以像 Jenkins 一样防止错误的提交登陆 master 吗?
- php - AMPPS 域面板添加域名错误
- javascript - JavaScript AJAX,xmlHttpRequest 在单独的类中
- javascript - react-native 中的图像压缩
- android - 如何将base64的图像从数据库插入到recycleView
- css - 如何让 zurb 基础单元格中的 DIV 中的元素在新行中开始
- javascript - 我如何获得数组 indexOf 元素包含值
- python - Using lambda in defining value in dict
- javascript - 在 Ember.js 中,子数组元素的 ID 不会在 ajax put 中传递
- android - 从 webview 中的“getHitTestResult()”获取图像类型