去做:
On button click in main window, open a popup dialog
Run Code Online (Sandbox Code Playgroud)
框架:
pygtk
Run Code Online (Sandbox Code Playgroud)
经验:
初学者
我将在Python GTK窗口(pyGTK)中禁用右键单击(以及上下文菜单),其中内部位于"窗口"pyWebKitGtk.
有人可以帮我写一些代码吗?
我认为最好直接在pyGTK中删除事件,但如果你知道如何在pyWebKitGtk中显示上下文菜单仍然是好的.
TNK TNK TNK
真的削减代码:
import gtk
import webkit
window = gtk.Window(gtk.WINDOW_TOPLEVEL)
window.connect("destroy", gtk.main_quit)
browser = webkit.WebView()
browser.open("http://www.stackoverflow.com")
scroller = gtk.ScrolledWindow()
scroller.add(browser)
window.add(scroller)
window.show_all()
gtk.main()
Run Code Online (Sandbox Code Playgroud) 使用以下代码,我总是得到相同的大小和mtime:
# -*- coding: utf-8 -*-
import gtk
import pygtk
import os
class LocalFileTreeView(gtk.TreeView):
def __init__(self, model = None):
super(LocalFileTreeView, self).__init__(model)
self.model = gtk.TreeStore(gtk.gdk.Pixbuf, str, str, str)
self.create_columns()
self.set_model_data('/home/foo/Downloads/')
self.set_model(self.model)
def create_columns(self):
self.icon_cell_renderer = gtk.CellRendererPixbuf()
self.filename_cell_renderer = gtk.CellRendererText()
self.size_cell_renderer = gtk.CellRendererText()
self.last_modified_cell_renderer = gtk.CellRendererText()
self.icon_column = gtk.TreeViewColumn(None, self.icon_cell_renderer, pixbuf = 0)
self.filename_column = gtk.TreeViewColumn('filename', self.filename_cell_renderer, text = 1)
self.size_column = gtk.TreeViewColumn('size', self.size_cell_renderer, text = 2)
self.last_modified_column = gtk.TreeViewColumn('last modified', self.last_modified_cell_renderer, text = 3)
self.append_column(self.icon_column)
self.append_column(self.filename_column)
self.append_column(self.size_column)
self.append_column(self.last_modified_column)
def set_model_data(self, path, …Run Code Online (Sandbox Code Playgroud) 所以我终于明白PyGTK是如何工作的,我正在开发一个简单的SQLite管理器应用程序.
为了显示查询的结果,我使用带有gtk.TreeView的gtk.ScrolledWindow.我设法在我需要的时候添加甚至更改ListStore对象中的值,我不能做的是更改ListStore对象的模型.
例如,在一个查询中,我可能有两列结果:
self.query_results = gtk.ListStore(str,str)
self.query_results.append(["1"],["John Doe"])
Run Code Online (Sandbox Code Playgroud)
在另一个我可能会得到更多列:
self.query_results = gtk.ListStore(str,str,str,str)
self.query_results.append(["20"],["Jane"],["jane@example.com"],["password"])
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用像
self.query_results = gtk.ListStore(*[str]*len(columns))
Run Code Online (Sandbox Code Playgroud)
但是显然gtk.ListStore在创建之后不能更改它的模型,那么我该如何更新这个查询表呢?每次运行不同的查询时,是否需要销毁Treeview并再次绘制它?
谢谢,这是我在StackOverflow上的第一个问题,所以请原谅我没有遵循的任何错误/发布指南.
新的,我知道当你调用gtk.main时程序应该进入无限循环.当调用self.quit时,gtk.main中的循环将中断.
但我需要另一个循环活动,它将检查日志文件的更改,并不断更新更改,进入gtk.Textbuffer,以显示在gtk.Textbox中.那么在哪里可以在以下代码中添加此循环.
class MessageBox:
def __init__(self):
builder = gtk.Builder()
builder.add_from_file("mbx.glade")
self.window = builder.get_object("window")
dic = { "on_buttonSend_clicked" : self.sendmsg,
"on_entry_activate" : self.sendmsg,
"on_buttonWhois_clicked" : self.sendwhois,
"on_buttonIdleTime_clicked" : self.sendidletime,
"on_window_destroy" : self.exitfunc}
builder.connect_signals(dic)
self.entry = builder.get_object("entry")
self.display = builder.get_object("display")
self.displaybuff=self.display.get_buffer()
def exitfunc(self, widget):
def sendmsg(self, widget):
def sendwhois (self, widget):
def sendidletime (self, widget):
if __name__ == "__main__":
msgbox = MessageBox()
msgbox.window.show()
gtk.main()
Run Code Online (Sandbox Code Playgroud) 我想让PyGTK Tree-view(耦合到List Store)的选择行不可选,如果可能的话,显示为灰色.
有没有办法做到这一点?
我使用python opencv2模块开发了一个程序.
只要按下某个键,程序就会上传图像.
这是伪代码:
import cv2
from msvcrt import getch
while True:
k = getch()
if k == 'w':
img = cv2.imread(filedir + orange.jpg)
cv2.namedWindow
cv2.imshow(img)
waitkey()
destroyAllWindows
elif k == 'a'
img = cv2.imread(filedir + banana.jpg)
cv2.namedWindow
cv2.imshow(img)
waitkey()
destroyAllWindows
Run Code Online (Sandbox Code Playgroud)
这是自我解释,因为当我按下'w'时,我正在尝试上传'orange.jpg'文件.
我真正的问题是:如何以这种方式设计程序,用户不必按两次键,一键按下关闭图像文件,其他按键打开文件.这使设计失败,因为我想在一次击键中进行处理.即使用户按下'w'并且'orange.jpg'已经上传,也不会关闭此文件,该文件应该刷新.类似地,当用户按下'a',并且'orange.jpg'打开时,'orange.jpg'文件应该关闭,banana.jpg应该自动打开,这应该是一次操作.截至目前,我必须按两次键才能执行此任务.
我已经实现了代码,所以即使有人建议我去pygtk并通过按键使用它来上传图像,我也没有问题.我唯一的目标是破坏上传的图像而不会造成太多用户干扰,即处理应该是自主的.
正如beark所说,在程序中使用getch()意味着焦点将始终在控制台上.我对此并不满意,只想通过按键上传图像,但是控制台阻碍了这个动作.
谢谢.
pygtk ×9
python ×8
gtk ×3
contextmenu ×1
linux ×1
numpy ×1
opencv ×1
python-2.7 ×1
right-click ×1
size ×1
stat ×1
time ×1
webkit ×1