- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试制作一个允许用户手动选择文件或将文件拖放到 MainWindow
中的程序。
文件浏览器可以工作并且 MainWindow 接受放置但我不知道如何:
myMainWindow
类中获取 filePath
并进入类 Ui_MainWindow
pushButton
的文本更改为“File Selected”。似乎我需要使用 emit()/signal() 在两个类之间发送信息,但我不知道如何连接它们。
完整代码:
from PySide import QtCore, QtGui
class myMainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent=parent)
self.filePath = ''
def dragEnterEvent(self, event):
if event.mimeData().hasUrls:
event.accept()
else:
event.ignore()
def dragMoveEvent(self, event):
if event.mimeData().hasUrls:
event.setDropAction(QtCore.Qt.CopyAction)
event.accept()
else:
event.ignore()
def dropEvent(self, event):
if event.mimeData().hasUrls:
event.setDropAction(QtCore.Qt.CopyAction)
event.accept()
for url in event.mimeData().urls():
self.filePath = (str(url.toLocalFile()))
# What else do I do here?
else:
event.ignore()
class Ui_MainWindow(object):
def selectFile(self):
self.filePath = QtGui.QFileDialog.getOpenFileName()
self.pushButton.setText('File Selected')
print(self.filePath)
def myChanges(self):
self.pushButton.clicked.connect(self.selectFile)
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
MainWindow.setAcceptDrops(True)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtGui.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(330, 180, 75, 23))
self.pushButton.setObjectName("pushButton")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
self.myChanges()
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
self.pushButton.setText(QtGui.QApplication.translate("MainWindow", "Browse", None, QtGui.QApplication.UnicodeUTF8))
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
MainWindow = myMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
最佳答案
在任何面向对象语言中“在类之间发送信息”(或让它们通信)的唯一方法是通过消息(例如 python 的方法)。 Pyside/Qt 的信号在处理多个线程时使用,并且您需要在主线程(发生视觉事件的地方)执行某些操作。 Pyside 的/Qt 的信号也用于当你想连接一个 Action 时(例如点击一个按钮到正在显示的图像)。
在您的示例中,我认为最好的办法是让这些类相互了解(相互引用)并在需要时发送消息。例如,当您调用 setupUI 时,您将 mainWindow 作为参数传递。在那个方法里面,你可以有类似
def setupUi(self, MainWindow):
self._mainWindow = MainWindow
mainWindow.setUi(self)
setUi 方法会将那个类保存为一个属性。然后在 DropEvent 上,您可以将路径作为另一条消息的参数发送到 UI。
关于python - 派赛德/PyQt : How to send information between classes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44657626/
(“ donut 派”)是否有最大切片数?我使用了 highchart(“ donut 派”)示例,但无法超过 10 个切片。请注意,内部切片“F”丢失了。下面是示例代码。 http://jsfidd
有谁知道如何找到 Samsung Galaxy 手机等同于 Settings.ACTION_ZEN_MODE_PRIORITY_SETTINGS 的常量?我有一个应用程序在三星用户单击应该将他们带到“
所以我很难弄清楚如何设置饼图/图例位置的布局。我希望图例左对齐,饼图右对齐。 40/60 百分比 -ish。 像这样: chart = new Highcharts.Chart({ c
我试图创建一种带有 4 个切片的圆形旋转木马,通过单击一个切片,它会扩展到约 2/3 的饼图,显示它的内容(另一个切片同样会收缩)基本上我是从 raphael “growing pie” 演示开始的
我尝试了所有可能的方式来提供 PIE.js 的路径,我使用的是 asp.net,这与在 java+tomcat 中的工作方式相同。我试过这样给 1)文件:css/home.css,css/pie/PI
cmds = ['time'] while True: inp = input('::> ') sinp = inp.split() if str(sinp[0]) in cm
我已经在 Raphael Google Groups 上看到过这个问题,但经过数小时的搜索后,在这里以及 Google 上,我似乎找不到解决方案。 我只是希望能够使用 jQuery 定位我的饼图(sv
这个问题在这里已经有了答案: Permission Denial: startForeground requires android.permission.FOREGROUND_SERVICE (5
我是一名优秀的程序员,十分优秀!