Вы не показываете свою кнопку с button1.show()
.
Кроме того, лучший способ написания вашего кода будет:
import gi
gi.require_version('Gtk','3.0')
from gi.repository import Gtk
class GUI:
def __init__ (self):
self.builder = Gtk.Builder()
self.builder.add_from_file("test.glade")
self.builder.connect_signals(self)
window = self.builder.get_object("window1")
window.show_all()
def on_back_clicked(self, button):
pass
def on_destroy_clicked(self, button):
Gtk.main_quit()
def on_forward_clicked(self, button):
pass
def on_refresh_clicked(self, button):
pass
def on_home_clicked(self, button):
pass
def on_information_clicked(self, button):
pass
def on_delete_clicked(self, button):
pass
def on_add_clicked(self, button):
box = self.builder.get_object("boxMain")
button1 = Gtk.Button()
button1.set_label("Button")
box.pack_start(button1,True,True,0)
button1.show()
print("done")
GUI()
Gtk.main()
Импорт в Java необходим только для того, чтобы компилятор знал, что a Дата
- если вы набираете
Date date = new Date();
Импорт не похож на #include
в C / C ++; все типы в classpath доступны , доступны , но вы импортируете
их, чтобы избежать необходимости писать полное имя. И в этом случае это не нужно.
Хороший вопрос !!
Я думаю, что результатом является разница между тем, как java-компилятор обрабатывает выражения против операторов.
Date d = new Date(); // a statement
где as
new Thing().getDate().getTime()
- это выражение, которое встречается внутри метода println вызов. Когда вы вызываете getDate для нового Thing (), компилятор пытается обработать выражение, просматривая информацию о типе для класса Thing, где он получает объявление типа Date. Но когда вы пытаетесь использовать Date отдельно в выражении типа
Date d = new Thing().getDate();
, вы присваиваете результат типу в текущей области (класс TestUsesThing), компилятор пытается разрешить тип в этой области. В результате вы видите ошибку компилятора для неизвестного типа.
Являются ли Thing и TestUsesThing в одном пакете? Если это так, то вам не нужно импортировать Thing. Причина, по которой вам нужно импортировать Date, заключается в том, что он находится в другой упаковке.
операторы import
используются для нескольких вещей.
Всякий раз, когда мы говорим
System.out.println( new Thing().getDate().getTime() )
Компилятор анализирует это утверждение слева направо и попадает в этот класс.
Разбор компилятора первого уровня.
В качестве потребителя TestUsesThing получает только длинную переменную.
System.out.println (new Thing (). GetDate ())
5.1 В этом случае мы неявно обращаемся к методу .toString ()
На самом деле это был идеальный пример, поскольку есть два разных стандартных класса Java Date: java.util.Date и java. sql . Дата .
Откуда он знает, какой использовать? Просто. Метод getDate () объявляется как часть определения класса Thing, и частью этого объявления является его возвращаемый тип:
public java.util.Date getDate() {
return this.date;
}
Конечно, если у вас есть импорт в определении класса Thing - и он не является двусмысленным, вы просто говорите:
public Date getDate() {
Если бы вы декодировали двоичный файл класса Thing, вы бы увидели сигнатуру метода метода getDate, и она включает полное имя класса (включая пакет) возвращаемого типа.
Импорт - это просто способ сообщить компилятору, какой пакет (ы) вы хотите использовать при обращении к классам без явных уточнений. Список импорта будет проверяться всякий раз, когда будет замечено неквалифицированное имя класса, и пакеты будут искать. Если нет никакой двусмысленности (такой как импорт java.util.date и java.sql.Date), этот класс будет использоваться. Если вы можете определить класс неявным образом или если имя класса полностью определено, вам не нужно импортировать.