在 Tkinter 框架内嵌入 konsole 或 gnome 终端

Posted

技术标签:

【中文标题】在 Tkinter 框架内嵌入 konsole 或 gnome 终端【英文标题】:Embed a konsole or gnome-terminal inside a Tkinter Frame 【发布时间】:2018-11-07 22:59:02 【问题描述】:

我能够将 xterm 嵌入到 Tkinter GUI 框架中:

Frame2 = Frame(master)
Frame2.pack(fill=BOTH, expand=YES)
wid = Frame2.winfo_id()
os.system('xterm -into %d -hold -geometry 300x10 -sb &' % wid)

但这不起作用:

Frame2 = Frame(master)
Frame2.pack(fill=BOTH, expand=YES)
wid = Frame2.winfo_id()
os.system('gnome-terminal' % wid)

TypeError: not all arguments converted during string formatting

我可以以任何方式在框架中嵌入 konsole 或 gnome 终端吗?

【问题讨论】:

'gnome-terminal' % wid 中,没有将wid 值放入字符串的位置。你可能应该在某个地方有一个%d 如果我执行 os.system('gnome-terminal -into %d -hold -geometry 300x10 -sb &' % wid) 它是未知选项 -into(也是 --into)。跨度> 这不是解决方案。我在 xterm 句子上找不到与 -into 等效的词。但是,我所做的是更改背景,现在看起来更像 konsole,这是我想插入框架的那个。 os.system('xterm -fg white -bg black -into %d -hold -geometry 300x10 -sb &' % wid) 我并不是说我有办法解决你的问题(因为老实说我什至不明白你想要什么),我只是告诉你你得到的 TypeError 来自哪里。 是的,我尝试了几件事。您没有 %d 是正确的,它不会与框架 ID 连接,但是当您没有嵌入 xterm 而是 konsole 或 gnome-terminal 时,问题是 -i​​nto (既不 --into)被识别。我可以同时打开两者,但只能在框架内使用 xterm。我找到了打开 gnome-terminal 或 konsole 的方法,但不在 tkinter 框架内。无论如何谢谢你的回答。它澄清了为什么我不能。任何指向 os.system 上 gnome-terminal 或 konsole 属性的链接?我没有找到任何与此相关的内容。 【参考方案1】:

urxvt 和 st(Suckless Simple Terminal)也可以选择将终端窗口嵌入到另一个窗口中。

我在 Gtk 中执行此操作,但请记住,使用 Wayland,他们都在移除对插座和插头的支持,这就是将窗口嵌入其他窗口的机制。

【讨论】:

【参考方案2】:

我在Ubuntu上没有太多经验,但是在打字之后

xterm -帮助 控制台-帮助 gnome-terminal --help

我意识到也许 xterm 是嵌入 tkinter 框架的最佳终端,因为我不知道我可以编辑

/etc/X11/Xresources/x11-common(我运行的是 kubuntu 18.04)

和change as much as I want the style of the terminal:

XTerm*faceName: Bitstream Vera Serif Mono
xterm*faceSize: 11
xterm*vt100*geometry: 80x60
xterm*saveLines: 16384
xterm*loginShell: true
xterm*charClass: 33:48,35:48,37:48,43:48,45-47:48,64:48,95:48,126:48
xterm*termName: xterm-color
xterm*eightBitInput: false

!BLK Cursor
#define _color0        #000d18
#define _color8        #000d18
!RED Tag
#define _color1        #e89393
#define _color9        #e89393
!GRN SpecialKey
#define _color2        #9ece13
#define _color10       #9ece13
!YEL Keyword
#define _color3        #f0dfaf
#define _color11       #f0dfaf
!BLU Number
#define _color4        #8cd0d3
#define _color12       #8cd0d3
!MAG Precondit
#define _color5        #c0bed1
#define _color13       #c0bed1
!CYN Float
#define _color6        #dfaf8f
#define _color14       #dfaf8f
!WHT Search
#define _color7        #efefef
#define _color15       #efefef
!FMT Include, StatusLine, ErrorMsg
#define _colorBD       #ffcfaf
#define _colorUL       #ccdc90
#define _colorIT       #80d4aa
!TXT Normal, Normal, Cursor
#define _foreground    #dcdccc
#define _background    #1f1f1f
#define _cursorColor   #8faf9f
URxvt*color0         : _color0
URxvt*color1         : _color1
URxvt*color2         : _color2
URxvt*color3         : _color3
URxvt*color4         : _color4
URxvt*color5         : _color5
URxvt*color6         : _color6
URxvt*color7         : _color7
URxvt*color8         : _color8
URxvt*color9         : _color9
URxvt*color10        : _color10
URxvt*color11        : _color11
URxvt*color12        : _color12
URxvt*color13        : _color13
URxvt*color14        : _color14
URxvt*color15        : _color15
URxvt*colorBD        : _colorBD
URxvt*colorIT        : _colorIT
URxvt*colorUL        : _colorUL
URxvt*foreground     : _foreground
URxvt*background     : _background
URxvt*cursorColor    : _cursorColor
XTerm*color0         : _color0
XTerm*color1         : _color1
XTerm*color2         : _color2
XTerm*color3         : _color3
XTerm*color4         : _color4
XTerm*color5         : _color5
XTerm*color6         : _color6
XTerm*color7         : _color7
XTerm*color8         : _color8
XTerm*color9         : _color9
XTerm*color10        : _color10
XTerm*color11        : _color11
XTerm*color12        : _color12
XTerm*color13        : _color13
XTerm*color14        : _color14
XTerm*color15        : _color15
XTerm*colorBD        : _colorBD
XTerm*colorIT        : _colorIT
XTerm*colorUL        : _colorUL
XTerm*foreground     : _foreground
XTerm*background     : _background
XTerm*cursorColor    : _cursorColor

【讨论】:

我看到的问题是每次重新启动系统时都需要执行 xrdb -merge /etc/X11/Xresources/x11-common。我认为每次我的程序启动时都需要使用该命令执行一个过程 您需要在每个会话中以一种或另一种方式配置 X 资源一次。一旦加载它们,它们将一直存在,直到用户注销(或 X 崩溃等)。但这里的主要问题是您将覆盖用户的实际偏好。 @tripleee 该用户不再使用 Stack Overflow,因此无法回复您的评论。您可能需要考虑自己编辑他们的答案,或提供新答案。

以上是关于在 Tkinter 框架内嵌入 konsole 或 gnome 终端的主要内容,如果未能解决你的问题,请参考以下文章

Tkinter 嵌入图形子进程

如何使用 tkinter 在 python 中嵌入 python 解释器框架?

深入浅出matplotlib(79):在tkinter应用程序里嵌入matplotlib绘图

将 matplotlib 动画嵌入到 tkinter 帧中

tkinter 框架内的 C++“画布”来操作 MS visio 文件

框架的 Tkinter 滚动条