Python 要跟踪的两部分代码之间差异的原因 不适用的代码是:(只考虑注释部分;Mead()只用于创建SyStayIGIN(最初是用Twitter用Wi32 GUI实现的,但是在Qt中它的代码要少得多。我知道混合这些工具包/框架是不好的)。

Python 要跟踪的两部分代码之间差异的原因 不适用的代码是:(只考虑注释部分;Mead()只用于创建SyStayIGIN(最初是用Twitter用Wi32 GUI实现的,但是在Qt中它的代码要少得多。我知道混合这些工具包/框架是不好的)。,python,widget,tkinter,pyqt,compare,Python,Widget,Tkinter,Pyqt,Compare,代码是这样的:(我只替换了Note()部分,现在用Qt代替了tkinter,并让Note显示Qt的原因) tkinter窗口未显示的原因是您没有调用Tk实例的mainloop方法。窗口仅在屏幕上绘制以响应事件,事件仅在事件循环运行时处理(而mainloop是启动事件循环的原因) 你在问题中写道: 我知道混合使用这些工具包/框架是不好的 这并不是说它本身就不好。它更像是不可能的。不是真的,字面上,不可能,只是可能比值得付出的努力更难、更容易出错 两个(好吧,任何一个)GUI工具包需要一个事件循环才

代码是这样的:(我只替换了Note()部分,现在用Qt代替了tkinter,并让Note显示Qt的原因)


tkinter窗口未显示的原因是您没有调用
Tk
实例的
mainloop
方法。窗口仅在屏幕上绘制以响应事件,事件仅在事件循环运行时处理(而
mainloop
是启动事件循环的原因)

你在问题中写道:

我知道混合使用这些工具包/框架是不好的

这并不是说它本身就不好。它更像是不可能的。不是真的,字面上,不可能,只是可能比值得付出的努力更难、更容易出错


两个(好吧,任何一个)GUI工具包需要一个事件循环才能运行,而这两个事件循环彼此不兼容。即使您成功地合并了这两个事件循环,一个工具包中的窗口也无法与另一个工具包中的窗口交互。

那么您的问题是什么?问题是,为什么第一个代码示例中的窗口只有在我退出systrayico时才会出现n、 在第二个代码示例中,它按预期工作,创建的窗口立即出现?@user2366975:请在您的问题中添加一个实际问题;不要假设愿意回答的人也愿意挖掘所有注释。对不起,我认为“要跟踪”的部分标题中的内容意味着我无法确定窗口未创建的位置。我将在以后的问题中牢记这一点。好的,谢谢,问题也发生在systray的Win32 GUI模块上,而不是qt部分。我不确定mainloop,整个程序在代码中没有mainloop的情况下以空闲状态运行,因为我认为空闲提供了这是它自己的。不管怎样,我都要试试,谢谢!
from tkinter import Tk,Menu,TOP,Frame,X,NO,BOTH,YES,BOTTOM
from PyQt4.QtGui import *
import sys

class Note():
    def __init__(self):
        self.root=Tk()
        print("Note has been created, but is not being displayed. Why? \n If Exit is clicked, it shows.")

class Main():
    def __init__(self):
        self.notes=[]
        self.app = QApplication(sys.argv)
        self.app.setQuitOnLastWindowClosed(False);

        self.trayIcon = QSystemTrayIcon(QIcon("J:\\python\\SimpleNotes.ico"), self.app)
        self.menu = QMenu()

        self.newWindow = self.menu.addAction("new Note")
        self.separator = self.menu.addSeparator()
        self.exitAction = self.menu.addAction("Exit")

        self.exitAction.triggered.connect(self.close)
        self.newWindow.triggered.connect(self.newNote)
        self.trayIcon.setContextMenu(self.menu)
        self.trayIcon.show()

        self.app.exec()

    def newNote(self):
        print("Create new note entry has been clicked")
        note=Note()
        #note.show() #because note is of Tk, it gots no show()
        self.notes.append(note)

    def close(self):
        self.trayIcon.hide()
        self.app.exit()
        print("Exit menu entry has been clicked")

Main()
import sys
from PyQt4.QtGui import *


class Note(QMainWindow):
    def __init__(self):
        super(Note,self).__init__()
        self.w=QWidget()
        self.setWindowTitle("Note")
        self.setCentralWidget(self.w)

class Main():
    def __init__(self):
        self.notes=[]
        self.app = QApplication(sys.argv)
        self.app.setQuitOnLastWindowClosed(False);

        self.trayIcon = QSystemTrayIcon(QIcon("J:\\python\\SimpleNotes.ico"), self.app)
        self.menu = QMenu()

        self.newWindow = self.menu.addAction("new Note")
        self.separator = self.menu.addSeparator()
        self.exitAction = self.menu.addAction("Exit")

        self.exitAction.triggered.connect(self.close)
        self.newWindow.triggered.connect(self.newNote)
        self.trayIcon.setContextMenu(self.menu)
        self.trayIcon.show()

        self.app.exec()

    def newNote(self):
        print("Create new note entry has been clicked")
        note=Note()
        note.show()
        self.notes.append(note)

    def close(self):
        self.trayIcon.hide()
        self.app.exit()
        print("Exit menu entry has been clicked")

Main()