這一段代碼在cython編譯的時候報錯:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'test_cython.ui'
#
# Created by: PyQt5 UI code generator 5.6
#
# WARNING! All changes made in this file will be lost!
import sys,os
sys.path.append('../')
from PyQt5.QtWidgets import *
from PyQt5.QtWidgets import QPushButton
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QRect,QCoreApplication,QMetaObject
from test_cython.test_cython3 import *
class Ui_MainWindow(QMainWindow):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QPushButton(self.centralwidget)
self.pushButton.setGeometry(QRect(350, 210, 75, 23))
self.pushButton.setObjectName("pushButton")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QMenuBar(MainWindow)
self.menubar.setGeometry(QRect(0, 0, 800, 23))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QMetaObject.connectSlotsByName(MainWindow)
self.pushButton.setText('test')
def tmp():
eval('QDialog().exec()')
self.pushButton.clicked.connect(tmp)
def retranslateUi(self, MainWindow):
_translate = QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "PushButton"))
app = QApplication(sys.argv)
w=Ui_MainWindow()
w.setupUi(w)
w.show()
sys.exit(app.exec_())
報錯的情況:

然后我就發現,只要代碼里面出現了“.exec”cython就無法編譯通過,真是神了。
把 .exec() 改成 .show() 編譯順利通過,改成 eval('QDialog().exec()') 編譯也能通過。。
所以exec在cython里面是個什么特殊的字串嗎?為什么沒有辦法編譯通過??
請大神指教~!!
uj5u.com熱心網友回復:
exec 是內置函式:https://docs.python.org/3/library/functions.html#execuj5u.com熱心網友回復:
作記號,作記號,uj5u.com熱心網友回復:
怎么做記號?uj5u.com熱心網友回復:
根據目前查了點資料 +已有經驗判斷:你說的無法編譯通過,總是有具體原因的。所以 沒什么神不神的,關鍵看你自己是否清楚出錯原因。
具體代碼是?
看到你現有代碼是:
eval('QDialog().exec()')意思就是你說的 可以編譯通過?
對于你的問題,涉及到QT,本人不是很熟悉。
但是可以幫你明確一些相關知識:
1. eval
是Python內置函式
典型用法是:
python
Python 3.6.5 (default, Nov 29 2019, 11:38:35)
[GCC 4.2.1 Compatible Apple LLVM 10.0.1 (clang-1001.0.46.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> print(eval)
<built-in function eval>
>>> '3+ 4'
'3+ 4'
>>> eval('3+4')
7
>>>
即:
普通的字串,放在python中,只是普通字串
加上eval后,強制幫你轉換成 python代碼段 然后幫你執行
2.你說的QT中的 exce 和 show
幫你搜了點資料
QDialog Class | Qt Widgets 5.15.0
->總體看來是:
eval和show是用法不同
具體怎么用
你自己好好研究后,再決定。找個適合你的情況的寫法。
另外幫你搜了
QDialog python
python QT 視窗顯示
找到一些 或許值得你參考的資料
PyQt5 筆記6 -- 對話框(QDialog)_Wang_Jiankun的博客-CSDN博客_pyqt qdialog 引數
第4章 PyQt 5基本視窗控制元件
總體看下來是:
需要你自己好好研究 QDialog 的Pyhon的用法
而不是上面所謂的看起來像是語法的錯誤
uj5u.com熱心網友回復:
再補充2個相關帖子:PyQt - QDialog Class - Tutorialspoint
的
import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
def window():
app = QApplication(sys.argv)
w = QWidget()
b = QPushButton(w)
b.setText("Hello World!")
b.move(50,50)
b.clicked.connect(showdialog)
w.setWindowTitle("PyQt Dialog demo")
w.show()
sys.exit(app.exec_())
def showdialog():
d = QDialog()
b1 = QPushButton("ok",d)
b1.move(50,50)
d.setWindowTitle("Dialog")
d.setWindowModality(Qt.ApplicationModal)
d.exec_()
if __name__ == '__main__':
window()
Creating Dialogs and Alerts in PyQt5 (Updated 2020) — Learn PyQt5 GUI programming hands-on
的:
class MainWindow(QMainWindow):
# def __init__ etc.
# ... not shown for clarity
def onMyToolBarButtonClick(self, s):
print("click", s)
dlg = QDialog(self)
dlg.setWindowTitle("HELLO!")
dlg.exec_()
和:
class CustomDialog(QDialog):
def __init__(self, *args, **kwargs):
super(CustomDialog, self).__init__(*args, **kwargs)
self.setWindowTitle("HELLO!")
QBtn = QDialogButtonBox.Ok | QDialogButtonBox.Cancel
self.buttonBox = QDialogButtonBox(QBtn)
self.buttonBox.accepted.connect(self.accept)
self.buttonBox.rejected.connect(self.reject)
self.layout = QVBoxLayout()
self.layout.addWidget(self.buttonBox)
self.setLayout(self.layout)
class MainWindow(QMainWindow):
# def __init__ etc.
# ... not shown for clarity
def onMyToolBarButtonClick(self, s):
print("click", s)
dlg = CustomDialog(self)
if dlg.exec_():
print("Success!")
else:
print("Cancel!")
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/18220.html
上一篇:wxpython庫,我用TextCtrl獲取輸入資訊,然后用GetVauel()得到字串,但是列印出來是記憶體地址,該怎么修改?
