我正在写一个程序应该:
我正在使用类,所以我可以稍后将代码插入到更大的程序中.但是,我无法正确加载我的按钮.
import tkinter as tk
class Demo1(tk.Frame):
def __init__(self):
tk.Frame.__init__(self)
self.pack()
self.master.title("Demo 1")
self.button1 = tk.Button(self, text = "Button 1", width = 25,
command = self.new_window)
self.button1.grid(row = 0, column = 1, columnspan = 2, sticky = tk.W+tk.E+tk.N+tk.S)
def new_window(self):
self.newWindow = Demo2()
class Demo2(tk.Frame):
def __init__(self):
new = tk.Frame.__init__(self)
new = tk.Toplevel(self)
new.title("Demo 2")
new.button = tk.Button(text = "Button 2", width = 25,
command = self.close_window)
new.button.pack()
def close_window(self):
self.destroy()
def main():
Demo1().mainloop()
if __name__ == …Run Code Online (Sandbox Code Playgroud) 有没有什么理由说QtGui与PyQt5一起打包???
我正在使用Mark Summerfield的Rapid GUI编程书.显然这本书是用Qt4编写的,但我被推荐使用Qt5和PyQt5.我想在第4章中运行第一个示例代码.代码以以下import语句开头:
import sys
import time
from PyQt5.QtCore import *
from PyQt5.QtGui import *
Run Code Online (Sandbox Code Playgroud)
编译器响应:
Traceback (most recent call last):
File "wakeUp.py", line 4, in <module>
from PyQt5.QtGui import *
ImportError: No module named 'PyQt5.QtGui'
Run Code Online (Sandbox Code Playgroud)
请注意,PyQt5.QtCore import语句不会生成错误.
从终端,
$ echo $PYTHONPATH
:/usr/lib/python3.3/site-packages
Run Code Online (Sandbox Code Playgroud)
有没有其他人遇到QtGui的导入错误?
从我可以进行的互动会议
>>> import PyQt5.Qt
>>> import PyQt5.QtDBus
>>> import PyQt5.QtNetwork
>>> import PyQt5.QtXmlPatterns
Run Code Online (Sandbox Code Playgroud)
但我没有QtWidgets,QtGui,QtWebkit,QtDesigner和其他几个.
此外,如果它有用,/ usr/lib/python3.3/site-package/PepQt5的内容是:
__init__.py QtCore.so QtDBus.so QtNetwork.so Qt.so QtXmlPatterns.so uic
Run Code Online (Sandbox Code Playgroud)
这是我能够导入的相同模块.其他模块(QtWidgets,QtGui等)是否也应该在这里?
我使用的是Ubuntu 13.04和Python 3.3.
我想计算直到n的平方和.假设n是4.然后此代码生成一个列表,其中包含0到4范围内的地图对象:
m = map(lambda x: x**2, range(0,4))
Run Code Online (Sandbox Code Playgroud)
足够轻松.现在调用m上的列表,然后求和:
>>> sum(list(m))
14
Run Code Online (Sandbox Code Playgroud)
意外的行为是,如果我再次运行最后一行,则总和为0:
>>> sum(list(m))
0
Run Code Online (Sandbox Code Playgroud)
我怀疑这是因为调用list(m)返回一个空列表,但我找不到这种行为的解释.有人可以帮我解决这个问题吗?
我一直试图找到一种方法来从主外部的Python线程更新GUI线程.sourceforge上的PyQt5文档有关于如何执行此操作的良好说明.但我仍然无法让事情发挥作用.
有没有一种很好的方法来解释交互式会话的以下输出?不应该有办法在这些对象上调用emit方法吗?
>>> from PyQt5.QtCore import QObject, pyqtSignal
>>> obj = QObject()
>>> sig = pyqtSignal()
>>> obj.emit(sig)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'QObject' object has no attribute 'emit'
Run Code Online (Sandbox Code Playgroud)
和
>>> obj.sig.emit()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'QObject' object has no attribute 'sig'
Run Code Online (Sandbox Code Playgroud)
和
>>> obj.sig = pyqtSignal()
>>> obj.sig.emit()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'PyQt5.QtCore.pyqtSignal' object …Run Code Online (Sandbox Code Playgroud) 例如,让我们使用类创建一个Treeview小部件,如下所示:
class FiltersTree:
def __init__(self, master, filters):
self.master = master
self.filters = filters
self.treeFrame = Frame(self.master)
self.treeFrame.pack()
self._create_treeview()
self._populate_root()
def _create_treeview(self):
self.dataCols = ['filter', 'attribute']
self.tree = ttk.Treeview(self.master, columns = self.dataCols, displaycolumns = '#all')
Run Code Online (Sandbox Code Playgroud)
填充root,像往常一样插入子项.在代码块的末尾,您可以使用Combo对象查看我想在树中放置Combobox的位置:
def _populate_root(self):
# a Filter object
for filter in self.filters:
top_node = self.tree.insert('', 'end', text=filter.name)
# a Field object
for field in filter.fields:
mid_node = self.tree.insert(top_node, 'end', text = field.name)
# insert field attributes
self.insert_children(mid_node, field)
def insert_children(self, parent, field):
name = self.tree.insert(parent, 'end', text …Run Code Online (Sandbox Code Playgroud) 我正在查看Qt文档.有一种快速而肮脏的方法来获取窗口小部件可以发出的所有信号的列表.
例如(withPyQt):
allSignalsList = thisWidget.getSignals()
Run Code Online (Sandbox Code Playgroud)
或者,新的Qt5 API上有一个很好的位置,它显示给定QObject的所有信号吗?