我在linux redhat7.5下发使用GTK+开发窗口显示界面。
主要是文件上传下载操作。
首先,进程中创建一个UI线程主要接收命令文件上传下载命令消息。
再创建一个GTK界面绘制线程,此GTK线程创建一个主windows窗口并设置为hide不显示此窗口,且调用gdk_threads_init和gdk_threads_enter以及gdk_threads_leave接口进行线程安全保护,在此GTK线程中调用gtk_main循环。此GTK线程会loop循环在GTK中。
UI线程通过事件通知GTK线程创建文件选择框或者进度条子窗口。
下载时候使用GTk+创建一个多文件选择框窗口,选择完毕文件后调用gtk_widget_destroy销毁窗口且函数传入参数为子窗口的GtkWidget指针。
上传文件时候使用GTK+创建一个文件选择窗口,选择文件目录作为保存文件路径,选择完毕后调用gtk_widget_destroy销毁窗口且函数传入参数为子窗口的GtkWidget指针。
上传或者下载文件超过1MB大小时,会创建一个进度条子窗口,窗口中创建一个box容器,添加label控件显示文件名,添加progressbar空间显示文件传输进度,添加两个button按钮分别作为暂停和取消按钮。动态更新此子窗口titel来显示传输百分比的数值,更新progressbar显示百分比条,更新label显示时间。传输完毕或者取消时,会调用tk_widget_destroy销毁窗口且函数传入参数为子窗口的GtkWidget指针。
但是进度条窗口会概率性出现下面这样的提示框,提示进度条窗口已经创建了。
出现时会导致进度条窗口按钮点击没有任何相应,进度条窗口也不能刷新。
这问题求帮助指教 qq 1733177
问题的图片,请见下面链接
https://www.oschina.net/question/2039_2287119
Linux下使用GTK+创建窗口关闭后,再创建时候提示窗口已经存在
-
- 帖子: 6
- 注册时间: 2018-09-19 16:39
- astolia
- 论坛版主
- 帖子: 6444
- 注册时间: 2008-09-18 13:11
Re: Linux下使用GTK+创建窗口关闭后,再创建时候提示窗口已经存在
没有具体的代码说个毛
-
- 帖子: 6
- 注册时间: 2018-09-19 16:39
- astolia
- 论坛版主
- 帖子: 6444
- 注册时间: 2008-09-18 13:11
Re: Linux下使用GTK+创建窗口关闭后,再创建时候提示窗口已经存在
首先xxx is ready的意思是xxx已经可用了,而不是xxx已经存在
这是gnome-shell的windowAttentionHandler给你的提示 https://github.com/GNOME/gnome-shell/bl ... ler.js#L20
按照它的代码,你创建窗口后设置焦点,或不显示在taskbar里它就不会提示了
另外这是提示是gnome-shell发出的,所以你的窗口无法响应应该另有原因
这是gnome-shell的windowAttentionHandler给你的提示 https://github.com/GNOME/gnome-shell/bl ... ler.js#L20
按照它的代码,你创建窗口后设置焦点,或不显示在taskbar里它就不会提示了
代码: 全选
gtk_window_present(GTK_WINDOW(pChildWin));
代码: 全选
gtk_window_set_skip_taskbar_hint(GTK_WINDOW(pChildWin), TRUE);
-
- 帖子: 6
- 注册时间: 2018-09-19 16:39
Re: Linux下使用GTK+创建窗口关闭后,再创建时候提示窗口已经存在
感谢帮助和答复,谢谢astolia 写了: ↑2018-09-20 10:15 首先xxx is ready的意思是xxx已经可用了,而不是xxx已经存在
这是gnome-shell的windowAttentionHandler给你的提示 https://github.com/GNOME/gnome-shell/bl ... ler.js#L20
按照它的代码,你创建窗口后设置焦点,或不显示在taskbar里它就不会提示了代码: 全选
gtk_window_present(GTK_WINDOW(pChildWin));
另外这是提示是gnome-shell发出的,所以你的窗口无法响应应该另有原因代码: 全选
gtk_window_set_skip_taskbar_hint(GTK_WINDOW(pChildWin), TRUE);
-
- 帖子: 6
- 注册时间: 2018-09-19 16:39
Re: Linux下使用GTK+创建窗口关闭后,再创建时候提示窗口已经存在
在调用gtk_widget_show前调用gtk_window_present 以及在先调用gtk_window_present再调用gtk_widget_show测试发现问题依然存在
- astolia
- 论坛版主
- 帖子: 6444
- 注册时间: 2008-09-18 13:11